在Zend Framework中使用setControllerName和setActionName不会改变实际的url?

时间:2009-09-30 06:00:49

标签: zend-framework

我正在使用Zend Framework开发一个身份验证类。我在Zend_Controller_Plugin_Abstract中添加了一个predispatch函数来检查用户登录状态。

public function preDispatch(Zend_Controller_Request_Abstract $request) {
if (!$logined){
 $request->setControllerName('auth')->setActionName('login');

}
}

如果用户未登录,他们会转移到登录页面,但是网址仍显示用户点击的其他网址。我想处理此predispatch插件中的所有内容,而不是在其他所有操作/控制页面中进行重定向。有解决方案吗

谢谢。

2 个答案:

答案 0 :(得分:4)

您必须重定向才能在浏览器中获取地址栏以进行更改。我在preDispatch()中执行此操作:

$request = $this->getActionController()->getRequest();
$urlOptions = array('controller' => 'auth', 
                    'action' => 'login',
                    'backTo' => $request->getRequestUri(),
                    );
$redirector = new Zend_Controller_Action_Helper_Redirector();
$redirector->gotoRouteAndExit($urlOptions, null, true);

答案 1 :(得分:1)

脚本启动后,操作控制器和操作只会影响内部路由。

要更改网址,您需要触发实际的重定向。