2012-03-02 6 views
7

Quando si chiama una funzione nei miei views/aiutanti/ di file, dal mio script all'interno views/scripts/, ottengo questo errore:Zend Framework - plugin per nome non è stato trovato nel registro

Message: Plugin by name 'SetBlnCompany' was not found in the registry; used paths: My_View_Helper_: /www/zendserver/htdocs/development/application/views/helpers/ Zend_View_Helper_: Zend/View/Helper/:/www/zendserver/htdocs/development/application/views/helpers/

bootstrap.php

protected function _initConfig() 
{  
    Zend_Registry::set('config', new Zend_Config($this->getOptions())); 
    date_default_timezone_set('America/Chicago'); 
} 

protected function _initAutoload() {  
    $autoloader = new Zend_Application_Module_Autoloader(array(    
     'namespace' => 'My',    
     'basePath' => dirname(__FILE__),  
    )); 
    return $autoloader; 
} 

Application.ini

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

applicativi/views/aiutanti/DropdownHelper.php

class Zend_View_Helper_Dropdownhelper extends Zend_View_Helper_Abstract 
{ 
    public $blnCompany = false; 

    public function getBlnCompany() { 
     return $this->blnCompany; 
    } 

    public function setBlnCompany($blnCompany) { 
     $this->blnCompany = $blnCompany; 
    } 
} 

copione causando errore

<?php 
    $this->setBlnCompany(true); 
    //...etc... 
?> 

EDI T per aggiungere più informazioni di background al mio post.

Idealmente userei questa classe "dropdown helper", per avere una funzione per "get html" una funzione per "get javascript" e molte funzioni di setter per impostare le opzioni prima che vengano chiamati getHtml e getJavascript.

+0

Solo per vostra informazione, qualsiasi classe che fate che non fa parte di ZF non dovrebbe iniziare con 'Zend_'. Qualcuno potrebbe pensare che il tuo helper di vista sia davvero integrato in ZF e aggiunge una ricerca aggiuntiva per il caricatore automatico. 'Nota: Importante: il codice che deve essere distribuito insieme alle librerie Zend Framework ma non fa parte delle librerie standard o extra (ad esempio codice dell'applicazione o librerie non distribuite da Zend) non deve mai iniziare con" Zend_ "o" ZendX _ ".' Vedi [Zend Framework - Naming Conventions] (http://framework.zend.com/manual/en/coding-standard.naming-conventions.html) – drew010

risposta

8

L'helper deve avere lo stesso nome del metodo utilizzato. Cambia Zend_View_Helper_Dropdownhelper in Zend_View_Helper_GetBlnCompany e funzionerà. Non dimenticare di cambiare il nome del file troppo: GetBlnCompany.php

Per poter utilizzare un metodo proxy, è sufficiente return $this;:

// /application/views/helpers/helpers/GetBlnCompany.php 
class Zend_View_Helper_GetBlnCompany extends Zend_View_Helper_Abstract 
{  
    public function getBlnCompany() 
    { 
     return $this; 
    } 

    public function fooBar($blnCompany) 
    { 
     return ucfirst($blnCompany); 
    } 
} 

Quindi, è necessario chiamare la vostra view helper come Segue:

$this->getBlnCompany()->fooBar('google'); 
//return "Google" 
+0

quindi un helper può avere solo una funzione pubblicamente utilizzabile? – adam

+0

No, puoi usare anche una funzione proxy, fammi modificare la mia risposta. – Liyali

+0

grazie. Idealmente userei questa classe "dropdown helper", per avere una funzione per "get html" come funzione per "get javascript" e molte funzioni setter per impostare le opzioni prima che vengano chiamati getHtml e getJavascript. – adam

Problemi correlati