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

Comportamiento extraño en plugin

Estas en el tema de Comportamiento extraño en plugin en el foro de Zend en Foros del Web. Hola. Tengo una inquietud respecto a como se comportan los plugins en Zend. Estoy haciendo un plugin para manejar los permisos de los distintos tipos ...
  #1 (permalink)  
Antiguo 13/03/2011, 20:56
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Comportamiento extraño en plugin

Hola. Tengo una inquietud respecto a como se comportan los plugins en Zend.
Estoy haciendo un plugin para manejar los permisos de los distintos tipos de usuarios. Todo funciona bien pero en una prueba me encontré con el siguiente comportamiento: (simplifico el código poniendo solo lo estrictamente necesario con mi cosulta)

Supongamos que tengo un plugin (registrado en el bootstrap) con el siguiente metodo:
Código PHP:
Ver original
  1. public function  preDispatch(Zend_Controller_Request_Abstract $request) {
  2.        $request->setModuleName('default');
  3.        $request->setControllerName('test');
  4.        $request->setActionName('index');
  5. }
y el controller test del modulo default con lo siguiente:
Código PHP:
Ver original
  1. public function indexAction(){
  2.      $datos = array(
  3.           'nombre' => ' John',
  4.           'apellido' => 'Doe'
  5.       );
  6.       $test = new Application_Model_DbTable_Test();
  7.       $test->insert($datos);
  8. }
Por algun motivo que realmente no entiendo me inserta en la base de datos 5 filas iguales.
Si comento el contenido del metodo preDispatch del plugin me inserta solo una fila como corresponde.
Si alguien me explica porque sucede esto estaré muy agradecido.-

Saludos
  #2 (permalink)  
Antiguo 13/03/2011, 23:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Comportamiento extraño en plugin

Es muy probable que estes llamando en tu layout/view a algun archivo que no existe, y al hacer esto, Zend va a "cachar" el request y procesarlo como si se llamara a un action / controller, y al tu poner el plugin que siempre se vaya a ese controller, es por eso que tienes ese comportamiento.

Saludos.
  #3 (permalink)  
Antiguo 13/03/2011, 23:57
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Comportamiento extraño en plugin

Hola. Estuve viendo eso que me decis. Para probar saque todo de mi view y deje lo basico del layout y sigue haciendo lo mismo. Tengo otro plugin que selecciona un layout dependiendo del modulo. Deshabilite ese plugin para que use el layour por defecto pero sigue igual la cosa. No habra alguna forma de probar que el comportamiento que tiene se deba a lo que me planteas?

Saludos.
  #4 (permalink)  
Antiguo 14/03/2011, 09:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Comportamiento extraño en plugin

Puedes usar una herramienta como Firebug para Firefox, en esta puedes ver los requests que hace tu pagina al servidor y puedes ver e inspeccionar cuales son las que esta ruteando Zend.

Saludos.
  #5 (permalink)  
Antiguo 14/03/2011, 09:47
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Comportamiento extraño en plugin

Hola.
Use firebug para ver cuantas peticiones habia al servidor y hay 1 sola y la hace correctamente (200 OK).
Se me ocurrió crear una variable de session e ir incrementandola en 1 cada vez que entra al action del controlador en cuestión. Efectivamente entra varias veces al action antes de mostrar la vista. De ahi que me inserta varias filas en la base de datos.
Lo que no encuentro es como solucionar el tema. Si a alguien se le ocurre algo.....

Saludos
  #6 (permalink)  
Antiguo 14/03/2011, 10:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Comportamiento extraño en plugin

Muy raro, sin ver exactamente el layout de tu proyecto, los plugins que tiene y la arquitectura que usas es muy complicado saber la causa, ya que en un proyecto nuevo no debería de pasar, intenta crear uno nuevo con el Zend_Tool y prueba nuevamente insertando tu plugin y de ahí empieza a hacer el debug.

Saludos.
  #7 (permalink)  
Antiguo 14/03/2011, 10:35
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Comportamiento extraño en plugin

ok. voy a crea un proyecto nuevo y ver que puede ser. Cualquier cosa comento el resultado. Muchas gracias

Saludos
  #8 (permalink)  
Antiguo 14/03/2011, 16:24
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Comportamiento extraño en plugin

Bueno, hice una instalación nueva y sigue el problema..... Pongo mi configuracion para ver si alguien me ilumina.

---- application.ini
Código PHP:
Ver original
  1. [production]
  2. phpSettings.display_startup_errors = 0
  3. phpSettings.display_errors = 0
  4. includePaths.library = APPLICATION_PATH "/../library"
  5. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
  6. bootstrap.class = "Bootstrap"
  7. appnamespace = "Application"
  8. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
  9. resources.frontController.params.displayExceptions = 0
  10.  
  11. resources.frontController.params.prefixDefaultModule = "0"
  12. resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
  13.  
  14. resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
  15.  
  16. autoloaderNamespaces[] = "App_"
  17. [staging : production]
  18.  
  19. [testing : production]
  20. phpSettings.display_startup_errors = 1
  21. phpSettings.display_errors = 1
  22.  
  23. [development : production]
  24. phpSettings.display_startup_errors = 1
  25. phpSettings.display_errors = 1
  26. resources.frontController.params.displayExceptions = 1

---- Bootstrap.php
Código PHP:
Ver original
  1. <?php
  2. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
  3.     protected function _initSession(){
  4.         Zend_Session::start();
  5.     }
  6.     protected function _initPlugins(){
  7.         $this->bootstrap('frontcontroller');
  8.         $this->frontController->registerPlugin(new App_Plugins_Permisos());
  9.     }
  10. }

---- Permisos.php (el plugin)
Código PHP:
Ver original
  1. <?php
  2. class App_Plugins_Permisos extends Zend_Controller_Plugin_Abstract{
  3.     public function  __construct(){}
  4.     public function  preDispatch(Zend_Controller_Request_Abstract $request) {
  5.         $request->setModuleName('default');
  6.         $request->setControllerName('index');
  7.         $request->setActionName('index');        
  8.     }
  9. }

---- IndexController.php
Código PHP:
Ver original
  1. <?php
  2. class IndexController extends Zend_Controller_Action{
  3.     public function init(){}
  4.     public function indexAction(){
  5.         $s = new Zend_Session_Namespace('test');
  6.         if(isset($s->test)){
  7.             $s->test++;
  8.         }else{
  9.             $s->test = 1;
  10.         }
  11.         Zend_Debug::Dump($s->test);
  12.         die();
  13.     }
  14. }

como nota, el layout es el que viene por defecto de la instalacion o sea:
Código HTML:
Ver original
  1. <?php echo $this->layout()->content; ?>
Saludos y muchas gracias por leer esto
  #9 (permalink)  
Antiguo 14/03/2011, 19:04
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Comportamiento extraño en plugin

Siguiendo mi batalla con esto vi que si solo seteo el modulo en el request del preDispatch del plugin funciona todo bien. Cuando seteo el controlador ya vuelve a tener el problema que describí mas arriba

Saludos
  #10 (permalink)  
Antiguo 14/03/2011, 20:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Comportamiento extraño en plugin

Que versión de Zend Framework manejas??
  #11 (permalink)  
Antiguo 14/03/2011, 20:25
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Comportamiento extraño en plugin

Al principio estaba usando la 1.10.8 pero cuando me recomendaste hacer una instalacion nueva baje la 1.11.4
  #12 (permalink)  
Antiguo 14/03/2011, 21:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Comportamiento extraño en plugin

Muy raro te pasa en todos los browsers? Checa que no tengas alguna extensión que quiera hacer prefetching o algo similar.

Saludos.
  #13 (permalink)  
Antiguo 14/03/2011, 22:06
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Comportamiento extraño en plugin

Se ve que es eso que vos decis.... en firefox 4, chrome 10 me pasa pero en internet explorer 8 funciona bien..... En firefox tengo muchas extensiones pero en chrome ninguna.
Ahora voy a investigar eso que decis del prefetching porque honestamente nunca lo escuche. Si me podes tirar unos cables respecto a esto....

Saludos
  #14 (permalink)  
Antiguo 14/03/2011, 22:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Comportamiento extraño en plugin

Prefectching es una tecnica que usan los browsers para ver cachear los links de alguna pagina que estes viendo antes de que le hagas click, lo que causa que sean múltiples requests.

Saludos.
  #15 (permalink)  
Antiguo 14/03/2011, 22:28
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Comportamiento extraño en plugin

Entiendo. Lei que Chrome lo utiliza nativamente. Probablemente Firefox tambien.
Pero si es una tecnica que usan los browsers que puedo hacer al respecto desde mi sitio web para que esto no ocurra?

Saludos.
  #16 (permalink)  
Antiguo 14/03/2011, 23:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Comportamiento extraño en plugin

Una opción es envíar la cabecera x-dns-prefetch-control a Off para evitar eso pero depende mucho del browser si lo obedece o no.

Saludos.
  #17 (permalink)  
Antiguo 15/03/2011, 08:51
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Comportamiento extraño en plugin

Si depende del browser no se si me convence. De todas formas voy a probar.
Ahora bien si esto ocurre por el browser no deberia ser un "problema" mas conocido? Te lo comento porque busque por todos lados y no encontre ninguna referencia.

Por ejemplo (se me ocurre esto al vuelo) si tengo un sistema de autentificacion se usa siempre setear el request y si quiero guardar en un log o permitir solamente X cantidad de intentos por sesion, como hago si internamente me hace request que no quiero?

como nota intente redirigir la pagina a otro controller desde el plugin y sigo con lo mismo.
Código PHP:
Ver original
  1. public function preDispatch(Zend_Controller_Request_Abstract $request) {
  2.         //aca intento evitar que se redireccione si esta "yendo" al mismo lugar
  3.         if($request->getControllerName() != 'otro'){            
  4.             $r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
  5.             $r->gotoSimpleAndExit('index', 'otro', $request->getModuleName());
  6.         }
  7. }

Saludos
  #18 (permalink)  
Antiguo 15/03/2011, 08:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Comportamiento extraño en plugin

Pues sí es algo conocido, de hecho por aquí en el foro ha pasado varias veces (no solo por Zend) que se detectan 2 o más requests simultaneos, y muchas veces es por problemas de configuración del mismo browser, desconozco la razón por que cambia esa configuración.

Saludos.
  #19 (permalink)  
Antiguo 15/03/2011, 14:08
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Comportamiento extraño en plugin

Si te ocurre en todos los navegadores, entonces debe ser un problema de tu consulta. Si te ocurre en un solo navegador pues ya sabes que tienes algo instalado en el navegador que provoca varios intentos. Mira por ejemplo con Firefox se puede impedir haciendo esto http://www.forosdelweb.com/2980556-post5.html
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: frameworks-y-php-orientado-a-objetos, plugin
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 07:19.