2010-02-25 11 views
19

Inizio con ZF (1.9.7) e voglio utilizzare Visualizza helper da una libreria condivisa tra tutti i miei progetti. Ma non riesco a trovare come aggiungerlo al percorso degli helper. I miei herpers lavorano multe quando li metto nel percorso degli aiutanti delle applicazioni.Come aggiungere una directory helper di vista (zend framework)

Qui è l'errore, dove trovo il percorso di aiutanti ZF, e il percorso a quelli applicativi.

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) 

migliori saluti
Cédric

risposta

38

può essere fatto molto facilmente con la risorsa Zend_Application integrata per la vista. Se stai usando configurazioni ini, aggiungere una riga come questa:

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

La fine della chiave è il prefisso del nome della classe, e il valore del percorso in cui risiedono.

+0

Grazie mille mi hai salvato 5 ore –

11

percorsi di supporto vengono aggiunti attraverso Zend_View_Abstract::addHelperPath(). È possibile chiamare questo metodo direttamente su un'istanza View esistente.

I percorsi di supporto possono anche essere configurati in vari modi durante il bootstrap. Controlla il capitolo del manuale ZF a Zend_Application per vedere come utilizzare le risorse e le classi bootstrap:

+1

Anche se tutte queste opzioni sono corrette, e lavoreranno, mi sento il 'application.ini' soluzione suggerita da David di essere il "best-practice" . Inoltre, nel tuo "_initView()" potresti usare '$ this-> bootstrap ('view'); $ view = $ this-> getResource ('view'); 'per usare la vista application.ini invece di una creata casualmente ... – gnarf

+0

@gnarf con l'eccezione di' addHelperPath() ', l'esempio bootstrap viene copiato 1 : 1 dalla guida di riferimento ZF. Non dovrebbe essere preso come nient'altro che un esempio. Sono ben consapevole che ci sono diversi modi per farlo (ad esempio usando un Ini). Sentiti libero di farlo in modo diverso. – Gordon

1

EDIT: Partenza view helper in zend framework per un introito più dettagliate su questo tema utilizzando Loggedinas view helper di Rob Allen.

Non solo si può fare, come specificato da David Caunt, ma anche si può fare in questo modo nel vostro bootstrap. Nota c'è sempre più di un modo per fare qualcosa in Zend Framework

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

Se si ha accesso all'oggetto vista, procedere come segue.

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

potrebbe essere necessario per ottenere l'oggetto visualizzazione se in un plugin front controller

controllare anche questa davvero grande set di poli di partenza qui:

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

5

C'è una problema quando si utilizza

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

posso accedere senza vista h eludere nel layout anche gli helper locali nel modulo.(Il plug-in per nome 'LoggedInAs' non è stato trovato nel registro) ma funziona ancora nei file dei modelli di visualizzazioni.

Ho messo questo codice "echo Zend_Debug :: dump ($ this)" alla fine del file di layout e c'è una parte di output.

 ["_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/" 
      } 
     } 

ma quando si utilizza questo codice nel file di bootstrap non ci sono problemi.

//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'); 

l'uscita era come di seguito:

  ["_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

La tua soluzione ha funzionato come un fascino! Stavo usando gli helper per l'intera applicazione e gli helper per ogni modulo! Questo è quello che stavo cercando! ;) –

Problemi correlati