2010-02-25 24 views
19

Comienzo con ZF (1.9.7) y quiero usar View Helpers de una biblioteca compartida entre todos mis proyectos. Pero no puedo encontrar cómo agregarlo a la ruta de los ayudantes. Mis herpers trabajan multas cuando los pongo en el camino de los ayudantes de la aplicación.Cómo agregar un directorio de vista de ayuda (Zend Framework)

Aquí está el error, donde encuentro el camino a los ayudantes de ZF, y el camino a los de aplicaciones.

object(ArrayObject)#71 (3) { 
    ["exception"]=> 
    object(Zend_Loader_PluginLoader_Exception)#70 (6) { 
    ["message:protected"]=> 
    string(151) "Plugin by name 'Voo' was not found in the registry; used paths: 
Zend_View_Helper_: Zend/View/Helper/;C:/ZendStd/www/applis/VOO4_PROJECTX/views\helpers/" 
    ["string:private"]=> 
    string(0) "" 
    ["code:protected"]=> 
    int(0) 
    ["file:protected"]=> 
    string(89) "C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Loader\PluginLoader.php" 
    ["line:protected"]=> 
    int(401) 

Saludos
Cédric

Respuesta

38

se puede hacer muy fácilmente con el recurso Zend_Application integrado para la vista. Si está utilizando configuraciones ini, añadir una línea como esta:

resources.view.helperPath.My_View_Helper = "My/View/Helper" 

El extremo de la llave es el nombre de la clase prefijo, y el valor de la ruta en la que residen.

+0

Muchas gracias me salvaste 5 horas –

11

caminos auxiliares se añaden a través Zend_View_Abstract::addHelperPath(). Puede invocar este método directamente en una instancia de Vista existente.

Las rutas de ayuda también se pueden configurar de varias formas durante el arranque. Mira el capítulo del manual ZF en Zend_Application para ver cómo utilizar las clases y recursos de rutina de carga:

+1

A pesar de todas estas opciones son correctas, y trabajarán, siento el 'application.ini' solución sugerida por David para ser el "mejor práctica" . Además, en su "_initView()" podría usar '$ this-> bootstrap ('view'); $ view = $ this-> getResource ('view'); 'para usar la vista application.ini en lugar de una creada aleatoriamente ... – gnarf

+0

@gnarf con la excepción de' addHelperPath() ', el ejemplo de arranque se copia 1 : 1 de la guía de referencia ZF. No debe tomarse como cualquier otra cosa sino como un ejemplo. Estoy consciente de que hay diferentes maneras de hacerlo (por ejemplo, usando un Ini). Siéntase libre de hacerlo de manera diferente. – Gordon

1

EDITAR: Salida view helper in zend framework para una toma más detallada sobre esta cuestión utilizando de rob allen Loggedinas ayudante de vista.

No solo puede hacer lo especificado por David Caunt, sino que también puede hacerlo así en su rutina de arranque. Tenga en cuenta que siempre hay más de una manera de hacer cualquier cosa en Zend Framework

Salida http://devzone.zend.com/article/3412

Si tiene acceso al objeto vista, haga lo siguiente.

<?php  
$view->addHelperPath('My/View/Helper/', 'My_View_Helper'); 
?> 

puede que tenga que obtener el objeto de vista si en un plugin controlador frontal

También puedes ver esto en realidad gran conjunto de mensajes de comenzar aquí:

http://zend-framework-community.634137.n4.nabble.com/Getting-view-from-Bootstrap-ZF1-8-tp659447p659460.html

5

Hay una problema al usar

resources.view.helperPath.App_View_Helper = APPLICATION_PATH "/../library/App/views/helpers" 

No puedo acceder a la vista h elper en el diseño incluso ayudantes locales en el módulo.(No se encontró el complemento por nombre 'LoggedInAs' en el registro) pero aún funciona en archivos de plantilla de vistas.

Pongo este código "echo Zend_Debug :: dump ($ this)" al final del archivo de diseño y hay una parte del resultado.

 ["_prefixToPaths:protected"] => array(3) { 
      ["Zend_View_Helper_"] => array(2) { 
      [0] => string(17) "Zend/View/Helper/" 
      [1] => string(16) "./views\helpers/" 
      } 
      ["ZendX_JQuery_View_Helper_"] => array(1) { 
      [0] => string(25) "ZendX/JQuery/View/Helper/" 
      } 
      ["Zend_View_Helper_Navigation_"] => array(1) { 
      [0] => string(28) "Zend/View/Helper/Navigation/" 
      } 
     } 

pero al usar estos códigos en el archivo bootstrap no hay ningún problema.

//Initialize and/or retrieve a ViewRenderer object on demand via the helper broker 
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); 
    $viewRenderer->initView(); 
    //add the global helper directory path 
    $viewRenderer->view->addHelperPath(APPLICATION_PATH.'/../library/App/views/helpers', 'App_View_Helper'); 

la salida fue, como a continuación:

  ["_prefixToPaths:protected"] => array(4) { 
       ["Zend_View_Helper_"] => array(3) { 
       [0] => string(17) "Zend/View/Helper/" 
       [1] => string(16) "./views\helpers/" 
       [2] => string(86) "D:/zf/application/modules/default/views\helpers/" 
       } 
       ["App_View_Helper_"] => array(1) { 
       [0] => string(85) "D:\zf\application/../library/App/views/helpers/" 
       } 
       ["ZendX_JQuery_View_Helper_"] => array(1) { 
       [0] => string(25) "ZendX/JQuery/View/Helper/" 
       } 
       ["Zend_View_Helper_Navigation_"] => array(1) { 
       [0] => string(28) "Zend/View/Helper/Navigation/" 
       } 
      } 
+0

¡Tu solución funcionó como un amuleto! ¡Estaba usando ayudantes para toda la aplicación y ayudantes para cada módulo! ¡Esto es lo que estaba buscando! ;) –

Cuestiones relacionadas