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

Usar plugin en layout Zend Framework

Estas en el tema de Usar plugin en layout Zend Framework en el foro de Zend en Foros del Web. Hola, quiero añadir en el layout una vista de un controlador, pero no consigo hacerlo: He creado el Plugin: Código PHP: <?php require_once  'Zend/Controller/Plugin/Abstract.php' ; ...
  #1 (permalink)  
Antiguo 22/04/2010, 03:21
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 12 años, 5 meses
Puntos: 3
Usar plugin en layout Zend Framework

Hola, quiero añadir en el layout una vista de un controlador, pero no consigo hacerlo:

He creado el Plugin:

Código PHP:
<?php
require_once 'Zend/Controller/Plugin/Abstract.php';

class 
LoginPlugin extends Zend_Controller_Plugin_Abstract {
    protected 
$_stack;

    public function 
dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {
        
$stack $this->getStack();
        
$menuRequest = new Zend_Controller_Request_Simple();
        
$menuRequest->setControllerName('login')
            ->
setActionName('index');
        
$stack->pushStack($menuRequest);
    }

    public function 
getStack()
    {
        if (
null === $this->_stack) {
            
$front Zend_Controller_Front::getInstance();
            if (!
$front->hasPlugin('Zend_Controller_Plugin_ActionStack')) {
                
$stack = new Zend_Controller_Plugin_ActionStack();
                
$front->registerPlugin($stack);
            } else {
                
$stack $front->getPlugin('ActionStack');
            }
        
$this->_stack $stack;
        }
        return 
$this->_stack;
    }
}
pero me sale una excepcion:

Cita:
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (login)'
El Plugin lo he guardado en la misma carpeta que el controlador LoginController.php

Posteriormente lo he registrado:

Código PHP:
$frontController Zend_Controller_Front::getInstance();
        
$frontController->addModuleDirectory(self::getBaseDir() . '/application/modules')
            ->
registerPlugin(new LoginPlugin())
            ->
throwExceptions(true)
            ->
dispatch(); 
En el layout no se que poner para que funcione, aunque primero tengo que arreglar el problema de la excepcion anterior. He probado poniendo la ruta absoluta, pero sigue igual.

Gracias

Un saludo
  #2 (permalink)  
Antiguo 22/04/2010, 08:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años
Puntos: 2132
Respuesta: Usar plugin en layout Zend Framework

El error que te dice es que no encuntra un controller que se llame login, asegurate de tener un controller llamado loginController.php y dentro la clase loginController que extienda a Zend_Controller_Action.

Saludos.
  #3 (permalink)  
Antiguo 22/04/2010, 16:07
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: Usar plugin en layout Zend Framework

el plugin LoginPlugin esta en la misma clase que LoginController que extiende a Zend_Controller_Action

Gracias

Un saludo
  #4 (permalink)  
Antiguo 22/04/2010, 16:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años
Puntos: 2132
Respuesta: Usar plugin en layout Zend Framework

Si pero el loginController debe de estar en la carpeta donde estan todos tus controllers, es por eso que al hacer el forward no lo encuentra.

Saludos.
  #5 (permalink)  
Antiguo 22/04/2010, 16:44
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: Usar plugin en layout Zend Framework

LoginController esta dentro de la carpeta usuario/controllers ya que uso una estructura modular y empieza asi:

class Usuario_LoginController extends Zend_Controller_Action

no se porqué no la encuentra.
  #6 (permalink)  
Antiguo 23/04/2010, 08:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años
Puntos: 2132
Respuesta: Usar plugin en layout Zend Framework

Te falta entonces indicarle al actionstack que el module es el de users:
Código PHP:
Ver original
  1. $stack = $this->getStack();
  2. $menuRequest = new Zend_Controller_Request_Simple();
  3. $menuRequest->setControllerName('login')
  4.                         ->setActionName('index')
  5.                         ->setModuleName('usuario');
  6. $stack->pushStack($menuRequest);
  #7 (permalink)  
Antiguo 24/04/2010, 02:05
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: Usar plugin en layout Zend Framework

correcto, era eso. gracias. pero sigo sin saber como ponerlo en el layout.

Gracias

Un saludo
  #8 (permalink)  
Antiguo 24/04/2010, 15:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años
Puntos: 2132
Respuesta: Usar plugin en layout Zend Framework

Para llamarlo en el layout simplemente tienes que hacer el render a otra parte de tu view, aunque por lo general no se recomienda hacerlo, de hecho el plugin del ActionStack va a ser removido segun los autores de Zend.

Lo mejor para este caso es que uses un View Helper.

Saludos.

Etiquetas: framework, layout, 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 21:12.