在我的控制器/动作中,我可以调用动作助手
$this->_helper->getHelper('layout')->disableLayout();
我想在插件中做同样的事情,所以我尝试了这个,但它不起作用。插件如何访问动作助手?
$controller = $this->getRequest()->getControllerName();
$controller->getHelper('layout')->disableLayout();
答案 0 :(得分:8)
方法getControllerName
返回控制器的名称,而不是对象。在前端控制器插件中,您无权访问控制器对象。
如果您想在插件中访问操作助手,则应使用Zend_Controller_Action_HelperBroker
及其getStaticHelper()
方法:
还有两种静态方法可以从帮助程序代理检索帮助程序:getExistingHelper()和getStaticHelper()。 getExistingHelper()只有在先前已由助手代理调用或显式注册时才会检索助手;如果没有,它会抛出异常。 getStaticHelper()与getExistingHelper()的作用相同,但如果尚未使用帮助程序堆栈注册,则会尝试实例化帮助程序。 getStaticHelper()是检索您希望配置的帮助程序的不错选择。
所以你的代码应该是这样的:
$layout = Zend_Controller_Action_HelperBroker::getStaticHelper('Layout');
$layout->disableLayout();