Zend Framework - 如何从动作帮助器中调用控制器的重定向()

时间:2011-04-04 02:46:18

标签: php zend-framework

我正在对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'不存在......'。是否可以限制从动作帮助程序访问哪些控制器方法?

3 个答案:

答案 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');