2012-04-26 56 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