2010-02-03 11 views
10

Nel mio file layout.phtml ho:Zend: dove/come posso registrare gli helper di visualizzazione personalizzati?

<?php echo $this->Test(); ?> 

ho creato un aiutante vista di prova a application/views/helpers/Test.php

<?php 

class My_View_Helper_Test extends Zend_View_Helper_Abstract { 

    public function Test() { 
     return 'test'; 
    } 

} 

E il mio file di configurazione @configs/application.ini:

resources.view[] = '' 
resources.view.helperPath = APPLICATION_PATH "/views/helpers" 

errore ottengo:

Zend_Loader_PluginLoader_Exception: Il plug-in per nome 'Test' non è stato trovato nel registro ; percorsi usati: Zend_View_Helper_: Zend/Vista/Helper /:./ views/aiutanti/a /usr/share/php/Zend/Loader/PluginLoader.php on line 406

Su una nota simile non riesco a registrare il mio vista amministratore aiuto sia ..

resources.view.helperPath.Admin_View_Helper = APPLICATION_PATH "/modules/admin/views/helpers" 

mio modules/admin/views/helpers/AdminPanel.php:

<?php 

class My_View_Helper_AdminPanel extends Zend_View_Helper_Abstract { 

public function AdminPanel() { return 'test'; } 

} 

devo altra scelta che fare thi s nel Bootstrap con addHelperPath? Se così fosse, qualcuno potrebbe dimostrare come userò i miei percorsi?

+0

nel primo, si potrebbe desiderare per inserire un prefisso su helperPath ... 'resouces.view.helperPath.My_View_Helper =' – gnarf

+0

Inoltre: 'resources.view [] = ''' non ha senso come direttiva INI, potrebbe fare casino con te ... – gnarf

risposta

13

utilizzando application.ini è probabilmente il modo migliore per definire questi. Ho messo tutti i miei aiutanti vista dentro la cartella della libreria:

includePaths.library = APPLICATION_PATH "/../library" 
autoloadernamespaces.0 = "SNTrack_" 

; -- Note, these are the only resources.view lines I have... 
resources.view.doctype = "XHTML1_STRICT" 
resources.view.helperPath.SNTrack_View_Helper = APPLICATION_PATH "/../library/SNTrack/View/Helper" 

struttura di directory:

/ 
    application/ 
    library/ 
    SNTrack/ 
     View/ 
     Helper/ 
      Test.php 

Vista:

$this->test('test') 

SNTrack/Vista/Helper/Test.php:

class SNTrack_View_Helper_Test extends Zend_View_Helper_Abstract { 
    public function test($args) { return $args; } 
} 
+0

Ho provato quello che hai commentato, 'resources.view.helperPaths.My_View_Helper = APPLICATION_PATH"/views/helpers "' ma ancora non riesce a trovare 'Test'. Ti dispiace postare la tua struttura di lavoro, usando solo il tuo file ini? –

+0

La seleziono come risposta perché mi hai fornito la struttura della directory, anche se il modo in cui ho effettivamente risolto è stato spostando la mia funzione bootstrap che ha aggiunto la codifica/doctype alla vista all'inizio, prima dei miei altri metodi init e quello in qualche modo risolto. –

+0

@meder - Dovresti essere in grado di rimuovere tutti gli elementi doctype/encoding/etc dal bootstrap tutti insieme, sostituendolo con le appropriate direttive di configurazione (che sono abbastanza sicuro che l'uso del trucco '[]' non funziona negli INI) - Se trovi che non sta caricando abbastanza velocemente le tue impostazioni '$ this-> boostrap ('view');' nella parte superiore della tua funzione '_initApp()' nel tuo bootstrap dovresti leggere/impostare tutte le impostazioni quindi . – gnarf

1

nel mio bootstrap:

$view = new Zend_View(); 
$view->addHelperPath(DE_Config::get('DE_appDir').DIRECTORY_SEPARATOR.'lib'.DIRECTORY_SEPARATOR.'DE'.DIRECTORY_SEPARATOR.'View'.DIRECTORY_SEPARATOR.'Helper'.DIRECTORY_SEPARATOR, 'DE_View_Helper'); 
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); 
$viewRenderer->setView($view); 
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); 
+0

La costante DIRECTORY_SEPARATOR è ottima per l'esecuzione di un explode() sui percorsi dei file, ma non è necessaria per specificare un percorso di inclusione. Le barre in avanti funzionano bene su piattaforme Windows e * nix. (Solo una FYI) – Sonny

1

Ho appena avuto questo problema esatto, un Ho capito che era dovuto a un problema nel mio bootstrap: stavo definendo e usando un nuovo oggetto Zend_View in una delle mie funzioni _init, che penso sovrascriveva tutte le altre mie impostazioni di visualizzazione sia dal mio bootstrap che dal mio file application.ini (incluso la mia definizione resources.view.helperPath).Il codice incriminato era stato copiato ciecamente da here, e messo in una funzione _initJQuery() nel mio bootstrap, che si presentava così:

protected function _initJQuery() { 
    $view = new Zend_View(); 
    $view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper'); 

    $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); 
    $viewRenderer->setView($view); 
    Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); 
} 

La soluzione era quella di sostituire la prima linea ($ view = new Zend_View()) con questo:

$this->bootstrap('view'); 
$view = $this->getResource('view'); 

Un'altra cosa da nudo in mente, per quanto riguarda la vostra linea:

resources.view.helperPath = APPLICATION_PATH "/ views/aiutanti"

Si noti che questo registra solo il percorso, e non il prefisso di classe, quindi questo funzionerà solo se le classi di helper hanno il prefisso di classe Zend predefinito di Zend_View_Helper i.e. Zend_View_Helper_Test. Se si desidera che la classe di essere My_View_Helper_Test, allora avete bisogno di fare questo:

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

Problemi correlati