2012-04-26 51 views
1

我有以下代碼:如何優先考慮Zend Framework中的一個助手?

public function _setHelpers() { 
     Zend_Controller_Action_HelperBroker::addPrefix('My_Controller_Action_Helpers'); 
     Zend_Controller_Action_HelperBroker::addPath (APPLICATION_PATH . '/controllers/helpers'); 
    } 

有了這個,我可以在我的/控制器/動作/助手/ Helper.php或/application/controllers/helpers/Helper.php添加輔助閹。這是好的,但我需要優先考慮/ application /中的一個,即:如果我有兩個helpers加載/ in應用程序中的一個,而不是在My/Controller /中的一個...

EDITING

我通過代碼更改爲此解決這個問題:

public function _setHelpers() { 
    $prefix = 'My_Controller_Action_Helpers'; 
    Zend_Controller_Action_HelperBroker::addPrefix ($prefix); 
    Zend_Controller_Action_HelperBroker::addPath (APPLICATION_PATH . '/controllers/helpers', 'My_Controller_Action_Helper'); 
    return $this; 
} 

正如你可能會注意到,它幾乎是相同的,與添加路徑時,我還加了前綴的差異。感謝大家的幫助。

回答

1

添加到助手代理的插件路徑使用Zend_Loader_PluginLoader,它爲路徑使用LIFO堆棧,因此添加的最後一個路徑是第一個被檢查的路徑。鑑於你的代碼,因爲你是第二個加入application路徑,它應該有在文件優先My/Controller(包括addPrefixaddPath呼叫Zend_Loader_PluginLoader同樣的方法,使他們實際上是相同的事情。

這是不是你?發現

+0

實際上不,我有這樣兩個代碼: '類My_Controller_Action_Helpers_Noticia延伸My_Controller_Action_Helper_Abstract { \t保護的函數_direct(){ \t \t回聲1; \t} } 類My_Controller_Action_Helper_Noticia延伸Busca_Controller_Action_Helpers_Noticia { \t保護的函數_direct(){ \t \t回聲2; \t} }' 第一個是我/控制器/ ...,第二個在控制器/助手/ 它顯示1中的視圖... – Cito 2012-04-26 16:01:29

+0

在這種情況下的原因是因爲之一類沒有正確命名,所以它不會被加載。根據您的應用前綴,我認爲您必須更改'Controllers/Helpers'中的一個名爲'Busca_Controller_Action_Helper_Noticia'並確保位置是'application/controllers/action/helpers/Noticia.php' – drew010 2012-04-26 17:13:20

+0

事情是這樣的它是好的,問題是其他的,但我已經知道了。感謝您的幫助,您給我提供瞭解決此問題的線索(因爲我打印的前綴被添加到Zend_Controller_Action_HelperBroker :: getPluginLoader() - > getPaths()中,並且以這種方式我看到了需要添加addPath的前綴) 非常感謝! – Cito 2012-04-26 17:25:39