项目中需要自定义Action Helper。虽然可以将Action Helper放置在自定义的类库目录下解决Autoloading问题,但是由于该类只在当前项目中使用到,因此更希望实现如下路径:
application/
controllers/
helpers/
Acl.php
IndexController.php
Bootstrap.php
最终在StackOverflow上找到了解决办法,移除不必要的代码,具体实现如下:
类名:Application_Controller_Action_Helper_Acl
只要在Bootstrap.php中添加如下方法即可:
protected function _initActionHelpers()
{
Zend_Controller_Action_HelperBroker::addPath(
APPLICATION_PATH . '/controllers/helpers',
'Application_Controller_Action_Helper_'
);
}
如果该Action Helper可以在多个项目中使用,那么将其放置在自定义类库目录下的路径是个不错的选择,如下:
library/
My/
Controller/
Action/
Helper/
Acl.php
类名如下:My_Controller_Action_Helper_Acl
首先,在application/configs/application.ini
中添加如下配置:
autoloaderNamespaces.my = "My_"
或者
autoloaderNamespaces[] = "My_"
然后,在Bootstrap.php
中添加如下方法来加载Helper类:
protected function _initActionHelpers()
{
Zend_Controller_Action_HelperBroker::addHelper(
new My_Controller_Action_Helper_Acl()
);
}
以上就是两种不同的实现Action Helper自动加载的方法。起初由于对ZF的Resource Autoloading不熟悉,被StackOverflow上的解决方法迷惑了,最后发现其实实质内容都是一样的。
PS:其实Action Helper的用处我还没有搞清楚,目前只是照葫芦画瓢的说,囧!