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

Problema con zend_navigation - layout - view helper

Estas en el tema de Problema con zend_navigation - layout - view helper en el foro de Zend en Foros del Web. Antes que nada agradezco a quien este leyendo este msj y pueda ayudarme Estoy aprendiendo zend y me tope con un problema que luego de ...
  #1 (permalink)  
Antiguo 15/12/2010, 15:16
 
Fecha de Ingreso: diciembre-2010
Mensajes: 13
Antigüedad: 13 años, 4 meses
Puntos: 0
Problema con zend_navigation - layout - view helper

Antes que nada agradezco a quien este leyendo este msj y pueda ayudarme

Estoy aprendiendo zend y me tope con un problema que luego de buscar y buscar no logre resolver.


Bootstrap:

Código PHP:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

     protected function 
_initAutoload() 
      {
      
//Registro el plugin que verifica si el usuario esta logeado
      
$fc Zend_Controller_Front::getInstance();
      
$fc->registerPlugin(Plugin_CheckAccess::getInstance()); 

    }

 protected function 
_initNavigation()
    {
        
$this->bootstrap('layout');
                
$config $this->getOptions();
                
$layout $this->getResource('layout');
        
$view $layout->getView();

        
$confignav = new Zend_Config_Xml(APPLICATION_PATH '/configs/navegacion.xml''nav');

        
$container = new Zend_Navigation($confignav);


        
$view->navigation($container);
    }


protected function 
_initDoctype()
    {
   
        
$this->bootstrap('view');
        
$view $this->getResource('view');
         
$view->doctype('XHTML1_TRANSITIONAL');
        
$view->addHelperPath(APPLICATION_PATH '/views/helpers''My_View_Helper');
   

    }




Layout

Código PHP:
<?php echo $this->render('header.phtml'?>
<?php 
echo $this->navigation()->menu(); ?>
<?php 
echo $this->layout()->content?>
El menu de esta manera funciona ok.


Antes de agregar el menu, tenia un view helper que me mostraba cierta info dependiendo si el usuario esta o no logueado.

Este helper esta en

application
-->views
--> helpers
-->Login.php

Desde el layout lo llamaba de la siguiente manera

Código PHP:
<?php echo $this->Login(); ?>
Funcionaba perfecto!

Ahora cuando agregue el nav que les mostre al principio me sale el siguiente error:


Fatal error: Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message 'Plugin by name 'Login' was not found in the registry; used paths: Zend_View_Helper_: Zend/View/Helper/:./views/helpers/' in /home/calidad/www/proyecto/library/Zend/Loader/PluginLoader.php:412 Stack trace: #0 /home/calidad/www/proyecto/library/Zend/View/Abstract.php(1174): Zend_Loader_PluginLoader->load('Login') #1 /home/calidad/www/proyecto/library/Zend/View/Abstract.php(610): Zend_View_Abstract->_getPlugin('helper', 'Login') #2 /home/calidad/www/proyecto/library/Zend/View/Abstract.php(336): Zend_View_Abstract->getHelper('Login') #3 [internal function]: Zend_View_Abstract->__call('Login', Array) #4 /home/calidad/www/proyecto/application/layouts/scripts/layout.phtml(27): Zend_View->Login() #5 /home/calidad/www/proyecto/library/Zend/View.php(108): include('/home/calidad/w...') #6 /home/calidad/www/proyecto/library/Zend/View/Abstract.php(880): Zend_View->_run('/home/calidad/w...') #7 /home/calidad/www/proyecto/library/Zend/Layout.php(796): Zen in /home/calidad/www/proyecto/library/Zend/Loader/PluginLoader.php on line 412


Ahora si en el bootstrap comento la siguiente linea el error no aparece

Código PHP:
$view $layout->getView(); 
o si en el layout saco la siguiente linea me funciona el menu, pero me quedo sin la función que necesito de ese helper

Código PHP:
<?php echo $this->Login(); ?>

Es decir o me funciona una cosa o me funciona la otra


En el application.ini tambien probe agregar el path a los view helper de la siguiente manera:

resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/views/helpers"



Espero pueda ayudarme!

Desde ya muchas gracias

Cristian
  #2 (permalink)  
Antiguo 15/12/2010, 16:47
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Problema con zend_navigation - layout - view helper

El addHelperPath debería ser algo así:

Código PHP:
Ver original
  1. protected function _initDoctype()
  2. {
  3.     $this->bootstrap('view');
  4.     $view = $this->getResource('view');
  5.     $view->doctype('XHTML1_TRANSITIONAL');
  6.     $view->addHelperPath('My/View/Helper', 'My_View_Helper');
  7. }

Tu viewhelper deberia estar en:

library\My\View\Helper\Login.php y la clase deberia llamarse My_View_Helper_Login y contener al menos un metodo con el mismo nombre del segmento final de la clase, camelCased.

Para invocarlo:

Código PHP:
Ver original
  1. <?php echo $this->login(); ?>

Salu2.
  #3 (permalink)  
Antiguo 15/12/2010, 18:08
 
Fecha de Ingreso: diciembre-2010
Mensajes: 13
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con zend_navigation - layout - view helper

masterpuppet, gracias por tomarte el tiempo de contestar.

He intentado con tus sugerencias pero el error persiste.

Agrego un view helper de prueba de como lo tengo

Código PHP:
class My_View_Helper_Prueba extends Zend_View_Helper_Abstract {


    public function 
Prueba() {

    return 
'hola';
    }



Tal como comente, al poner en el layout

Código PHP:
<?php echo $this->prueba(); ?>
Funciona ok, aparece el hola..

Ahora cuando hago el getResource('layout') y el getView() es cuando se reproduce el error

Es decir cuando pongo lo siguiente en el bootstrap

Código PHP:
protected function _initNavigation()
{
     
$this->bootstrap('layout'); 
    
$layout $this->getResource('layout'); 
    
$view $layout->getView(); 

    
$confignav = new Zend_Config_Xml(APPLICATION_PATH '/configs/navegacion.xml''nav'); 

    
$container = new Zend_Navigation($confignav); 
    
$view->navigation($container); 


ahora si saco del layout la llamada al helper

Código PHP:
<?php echo $this->prueba(); ?>
el menu funciona y no hay error
  #4 (permalink)  
Antiguo 15/12/2010, 18:20
 
Fecha de Ingreso: diciembre-2010
Mensajes: 13
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con zend_navigation - layout - view helper

Encontre la solucion y me auto respondo por si a alguien le pasa, aunque seria bueno que alguien con mayor conociemiento explicara el porque. Por mi parte recien empiezo y estoy concentrado mas que como hacer x cosa que en como lo hace zend



Solucion:

En vez de hacer getResource('layout') lo hacemos a 'view'

Código PHP:
protected function _initNavigation()
    {
        
$confignav = new Zend_Config_Xml(APPLICATION_PATH '/configs/navegacion.xml''nav');
        
$container = new Zend_Navigation($confignav);

        
$this->bootstrap('view');
        
$view $this->getResource('view');
        
$view->navigation($container);
    } 
  #5 (permalink)  
Antiguo 15/12/2010, 18:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con zend_navigation - layout - view helper

El problema es el orden, al traer el view del layout este es un view en "blanco" y el resource loader crea otro que luego sobreescribe el el view del layout, es por eso que debes de hacerlo desde el view del Bootstrap.

Saludos.
  #6 (permalink)  
Antiguo 16/12/2010, 05:19
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Problema con zend_navigation - layout - view helper

Creo que el problema va mas alla del orden, el que crea el problema es Zend_Application_Resource_View que en vez de utilizar getStaticHelper del Broker para obtener el helper ViewRenderer crea uno nuevo y lo setea como el por defecto, seria interestane buscar info para ver si esto es bug o es por una cuestion de diseño, les dejo codigo para que sea mas grafico.

Zend_Application_Resource_View

Código PHP:
Ver original
  1. /**
  2.   * Defined by Zend_Application_Resource_Resource
  3.   *
  4.   * @return Zend_View
  5.   */
  6. public function init()
  7. {
  8.     $view = $this->getView();
  9.     $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
  10.     $viewRenderer->setView($view);
  11.     Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
  12.     return $view;
  13. }

Zend_Application_Resource_View - Refurbished

Código PHP:
Ver original
  1. /**
  2.  * Defined by Zend_Application_Resource_Resource
  3.  *
  4.   * @return Zend_View
  5.   */
  6. public function init()
  7. {
  8.     $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
  9.     if (null === $viewRenderer->view) {
  10.         $view = $this->getView();
  11.         $viewRenderer->setView($view);
  12.     } else {
  13.        $this->view = $view = $viewRenderer->view;
  14.     }
  15.     return $view;
  16. }

Salu2.

Última edición por masterpuppet; 16/12/2010 a las 05:28
  #7 (permalink)  
Antiguo 16/12/2010, 05:42
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Problema con zend_navigation - layout - view helper

Bueno dejo un poco mas de info(al parecer es un bug), una propuesta para usar getStaticHelper, igual sigue sin tener en cuenta que al momento de llamar a ViewRenderer este ya puede tener un view.

Etiquetas: layout, view
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 13:45.