在插件中调用动作助手

jbl*_*lue 0 php zend-framework

在我的控制器/动作中,我可以调用动作助手

$this->_helper->getHelper('layout')->disableLayout();
Run Code Online (Sandbox Code Playgroud)

我想在插件中做同样的事情,所以我尝试了这个,但它不起作用.插件如何访问动作助手?

$controller = $this->getRequest()->getControllerName();
$controller->getHelper('layout')->disableLayout();
Run Code Online (Sandbox Code Playgroud)

Rad*_*kel 8

方法getControllerName返回控制器的名称,而不是对象.在前端控制器插件中,您无权访问控制器对象.

如果你想在插件中访问动作助手,你应该使用Zend_Controller_Action_HelperBroker它的getStaticHelper()方法:

还有两种静态方法可以从助手代理中检索助手:getExistingHelper()和getStaticHelper().getExistingHelper()只有在先前已由助手代理调用或显式注册时才会检索助手; 如果没有,它会抛出异常.getStaticHelper()与getExistingHelper()的作用相同,但如果尚未使用帮助程序堆栈注册,则会尝试实例化帮助程序.getStaticHelper()是检索您希望配置的帮助程序的不错选择.

所以你的代码应该是这样的:

$layout = Zend_Controller_Action_HelperBroker::getStaticHelper('Layout');
$layout->disableLayout();
Run Code Online (Sandbox Code Playgroud)