我正在对Action Helper的preDispatch方法进行ACL检查。当它失败时,我想调用动作控制器的_redirect方法,但是我很难做到这一点。
在这篇文章附带的评论zend-framework, call an action helper from within another action helper中,我看到了两个解决方案。在第一个中,控制器作为$ this-> _actionController从帮助程序访问。在第二个中,使用$ this-> getActionController()。
访问它我尝试了以下两种方法:
$this->_actionController->_redirect('/');
$this->getActionController()->_redirect('/');
在任何一种情况下,我都会得到'方法'_redirect'不存在......'。是否可以限制从动作帮助程序访问哪些控制器方法?
答案 0 :(得分:14)
您可以在动作助手中使用Redirector action helper。例如:
class My_Controller_Action_Helper_Test extends Zend_Controller_Action_Helper_Abstract {
public function preDispatch() {
$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');
$redirector->gotoUrl('/url');
}
}
Controller _redirect method只是重定向器的gotoUrl
方法的包装器。
答案 1 :(得分:0)
示例如何在preDispatch()中执行此操作:
$request = $this->getActionController()->getRequest();
$urlOptions = array('controller' => 'auth',
'action' => 'login');
$redirector = new Zend_Controller_Action_Helper_Redirector();
$redirector->gotoRouteAndExit($urlOptions, null, true);
答案 2 :(得分:0)
为什么不使用:
$this->_response->setRedirect('/login');
$this->_response->sendResponse();
或者:
$this->_request->setModuleName('default');
$this->_request->setControllerName('error');
$this->_request->setActionName('404');