Variables publicas para todas la funciones del controlador

edited mayo 2012 in Beta2
Como dice el titulo, 

Como puedo declarar variables para todas las funciones de un controllador? y evitar redundar con codigo.

ejemplo:

<?php 
class SaludoController extends AppController {
public function hola() {
$this->fecha = date("Y-m-d H:i");
}
      
public function chao() {
$this->fecha = date("Y-m-d H:i");
}
}

Comentarios

  • Supongo que utilizando la teoría de la POO, creando esa fecha como atributo de la clase.

    <?php 
    class SaludoController extends AppController {
     var fecha = date("Y-m-d H:i");
          public function hola() {
    return $this->fecha;
    }
          
    public function chao() {
    return $this->fecha;
    }
    }
  • y si necesito instanciar un modelo (limites):

    $limite = new Limites();
    $this->influente_top = $limite->count_by_sql("SELECT limite_flotante FROM limites where  parametro='Influente'");

    y acceder a la variable $influente_top desde diferentes vistas del mismo controlador 
  • tengo:

    var influ_top = Load::model('limites')->count_by_sql("SELECT limite_flotante FROM limites where  parametro='Influente'");

    public function create(){
    $this->influente_top = $influ_top;
    }

    ERROR: Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE en var influ_top = Load::model('limites')->count_by_sql("SELECT limite_flotante FROM limites where  parametro='Influente'");


  • Los controladores en KumbiaPHP trabajan con filtros: 


    puedes tener un protected function before_filter() en tu controlador SaludoController , y este metodo sería como el constructor de la clase, allí haces la consulta y la guardas en un atributo del controlador, en tu caso en $inlfu_top, y en las acciones ya podras acceder al atributo y este tendrá el resultado de la consulta.

    Suerte...!!!
  • muchas gracias manuel_j555!!

    quedo Así:

    <?php
    Load::models('entradas','limites','detalleentradas');
    class EntradasController extends AppController{
    protected function before_filter(){
    /**
    * Cargo variables con valores de limites
    */
    $limite = new Limites();
    $this->anionico_top = 999.99; /*no carga como los otros*/
    $this->cationico_top = 999.99; /*no carga $limite->count_by_sql("SELECT limite_flotante FROM limites where parametro='P Catiónico'");*/
    $this->influente_top = $limite->count_by_sql("SELECT limite_flotante FROM limites where parametro='Influente'");
    $this->coagulante_top = $limite->count_by_sql("SELECT limite_flotante FROM limites where parametro='Coagulante'");
    $this->ph_top = $limite->count_by_sql("SELECT limite_entero FROM limites where parametro='Ph'");
    $this->sst_top = $limite->count_by_sql("SELECT limite_entero FROM limites where parametro='SST'");
    $this->trb_top = $limite->count_by_sql("SELECT limite_entero FROM limites where parametro='Trb'");
    $this->clr_top = $limite->count_by_sql("SELECT limite_flotante FROM limites where parametro='Clr'");
    $this->cu_top = $limite->count_by_sql("SELECT limite_flotante FROM limites where parametro='Cu'");
    $this->zn_top = $limite->count_by_sql("SELECT limite_flotante FROM limites where parametro='Zn'");
    $this->hu_top = $limite->count_by_sql("SELECT limite_flotante FROM limites where parametro='hu'");
    // Verificando si el rol del usuario actual tiene permisos para la acción a ejecutar
    if(!$this->acl->is_allowed($this->userRol, $this->controller_name, $this->action_name)){
    Flash::error("Acceso negado");
    View::template('acceso_negado');
    return false;
    }
    //cambiando template segun ACL
    if(Auth::get('rol')=="U"){
    View::template('usuario');
    }elseif(Auth::get('rol')=="R"){
    View::template('root');
    }elseif(Auth::get('rol')=="A"){
    View::template('administrador');
    }else{
    View::template('default');
    }
    }
    .
    .
    .
  • de nada hermano, varias recomendaciones:

    puedes hacer count de los modelos con el metodo count del ActiveRecord, ejemplo:

     $limEntero = new LimiteEntero();  $count = $limEntero->count_by_parametro('hu');

    Las verificaciones de permisos se las puedes dejar al controlador padre, AppController, ó crear tu propio controlador Padre, ejemplo AdminController.

    Aqui hay un ejemplo de uso de AdminController:


    Tambien puedes hecharle una mirada al backend, con eso ya tendras buena parte de la app lista en cuanto a usuarios recursos y permisos :-)


    Suerte...!!!
  • Se agradece, la preocupación y las recomendaciones.

    aunque preferiría éxito a suerte. lol

    como siempre manuel_j555 haciendo de la comunidad un mundo de posibilidades.




Sign In or Register to comment.