Foros del Web » Programando para Internet » PHP » Zend »

Zend duda sobre variables en plugins

Estas en el tema de Zend duda sobre variables en plugins en el foro de Zend en Foros del Web. Hola, recien empiezo con ZF, estoy provando con plugins y me ha surgido una duda, y por mucho que le doy vueltas no acabo de ...
  #1 (permalink)  
Antiguo 02/09/2010, 12:34
 
Fecha de Ingreso: septiembre-2010
Mensajes: 34
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Zend duda sobre variables en plugins

Hola, recien empiezo con ZF, estoy provando con plugins y me ha surgido una duda, y por mucho que le doy vueltas no acabo de entender.
La situación es la siguiente: tengo un plugin que creo y registro en el bootstrap. El plugin tiene una variable (protected $cont). El plugin tiene implementado el metodo predispatch(), de forma que cada vez que se llama a predispatch() se augmenta en uno $cont.

Código:
//bootstrap
    protected function _initAccessos()
	{	
        $front = Zend_Controller_Front::getInstance();
        $plugin= new App_Plugin_PluginAcl();
        $front->registerPlugin($plugin);
	}
Código:
//plugin
class App_Plugin_PluginAcl extends Zend_Controller_Plugin_Abstract
{
  
  	protected $cont=0;  
	
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {  ...
	   this->$cont++;
	   ...
	}
	}
El plugin funciona bien y ejecuta cuando debe, el problema es que al hacer un dump($cont) desde un controlador, así:
Código:
$front = Zend_Controller_Front::getInstance();
    $p=$front->getPlugin(App_Plugin_PluginAcl);
    Zend_Debug::dump($p->cont);
El valor de cont que muestra el dump() siempre es 'int (1)', ahun haber realizado algunas llamadas a acciones antes de llamar a la que muestra el dump(), que deberian haber incrementado el $cont.
No se si me he explicado muy bien...
Alguien me puede dar un poco de luz sobre el tema??

muchas gracias desde ya
  #2 (permalink)  
Antiguo 02/09/2010, 13:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Zend duda sobre variables en plugins

Recuerda que PHP es un lenguaje stateless, por lo que por cada request se crean las variables, si tu quieres que esta variable $cont persista tienes que crear una sesión y ahí almacenar el valor e incrementarlo.

Saludos.
  #3 (permalink)  
Antiguo 02/09/2010, 14:56
 
Fecha de Ingreso: septiembre-2010
Mensajes: 34
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend duda sobre variables en plugins

Vale, ahora ya entiendo... gracias por responder tan rapido.
Con mi pregunta he intentado simplificar mi caso, quiero decir, estoy intentando implementar un control de acceso a los modulos mediante Zend_Acl, pero quiero hacerlo de forma dinámica, es decir que inicialmente estan las reglas de acceso en una bd y hay que cargarlas sobre mi classe que extiende de zend_acl. Lo que estaba intentando hacer era:
Por un lado, en el bootstrap creaba la classe myacl que extiende de zend_Acl. En esta se cargaban los recursos y los roles (que son fijos), pero no se cargaban las reglas, se dejaba para despues.
A continuación se creaba el pluguin controlACL pasandole como parámetro la instancia de la clase myacl , esta se guardava en la variable _acl del plugin, y a continuación se registraba el plugin en el frontController.
Hasta aqui todo bien,he introducido un par de reglas a mano en la classe myacl, para comprobar si funcionaba, y sí, funcionaba ok.
Al intentar cargar más reglas desde el controlador indexController (obteniendo el plugin del frontController y accediendo a la var _acl del mismo y añadiendole las nuevas reglas con un metodo addRegla() ) aparentemente se cargaban ya que le hice un dump() al finalizar y el objeto ACL mostrado realmente contenia las ultimas reglas añadidas, pero al redireccionar al homeController, volvia a hacer el mismo dump (obteniendo el plugin del frontController y accediendo a la var _acl del mismo) y en el objeto ACL no aparecian las ultimas reglas añadidas desde el indexController, sin embargo el id de la instancia de objeto ACL era el mismo, con lo que no entendia nada.
Ahora ya se porque no funcionava, y el problema es el siguente, :) como hago para implementar ACL de forma dinamica??
La solucion que he pensado, es la siguiente:
Ya no hago nada en el bootstrap referente a este tema. En el indexController despues de haber autenticado al usuario, busco en la bd las reglas que conciernen al rol del usuario que acaba de iniciar sesión, creo la clase myACL que extiende de Zend_Acl, y le añado las reglas. A continuación creo el plugin controlACL pasandole la instancia de la clase myAcl al contructor y finalmente registro el plugin en el frontController y redirecciono al /home.
No se si funcionaria, pero me estoy dando cuenta al escribir, que creo que me pasará igual que antes con el ejemplo del contador, en el /home se habran perdido los datos, es así?
Igualmente no se si la alternativa que he pensado es apropiada, soy muy nueva en zf, y muchas veces hago cosas que pueden funcionar pero quizas no son 'correctas', estoy intendando seguir MVC con modulos, y a veces no se donde poner las cosas.
Espero no haber montado demasiado lio, no se me ocurre como hacerlo.
Gracias de antemano
  #4 (permalink)  
Antiguo 02/09/2010, 15:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Zend duda sobre variables en plugins

Lo que pasa es que justamente eso lo tienes que hacer en tu plugin en el preDispath, leer las reglas desde la BDD y no en el controlador, así las vas a tener listas en cualquiera de tus controllers.

Saludos.
  #5 (permalink)  
Antiguo 03/09/2010, 03:58
 
Fecha de Ingreso: septiembre-2010
Mensajes: 34
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend duda sobre variables en plugins

a ver si lo he entendido, lo que tu propones es que consulte la bd desde el plugin directamente? sin pasar por la clase myACL que extiende de ACL?
Seguí provando con lo que ya tenia, i al final he logrado que funcione, pero como te decia no se si es apropiado.
Registro el plugin en el bootstrap.
En el indexController al logear el usuario busco en la BDD sus reglas y creo la instancia de myACL con las reglas del usuario
Guardo en la session el objeto ACL
En el metodo PreDispatch() del pluguin se consultan las reglas del objeto ACL almacenado en la sessión
Funciona bien, pero es lo que te decia, que no se si es demasiado cargar la session con las reglas.
I no acabo de entender como hacerlo a tu modo. Seria consultar la bdd en el predispatch del plugin, en cada llamada , no? entonces ya no tendria la clase myACL?
voy un poco pez, lo siento...
gracias y saludos!
  #6 (permalink)  
Antiguo 03/09/2010, 06:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Zend duda sobre variables en plugins

De hecho la forma que lo haces es más correcta y no importa que cargues todo eso en sesión ya que para eso son ese tipo de variables, se almacenan en el server.

Saludos.
  #7 (permalink)  
Antiguo 03/09/2010, 06:55
 
Fecha de Ingreso: septiembre-2010
Mensajes: 34
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend duda sobre variables en plugins

me alegro entonces, así no tengo que tocar nada más.. :)
gracias por todo!

Etiquetas: php, plugins, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:04.