我正在使用Zend Framework开发一个身份验证类。我在Zend_Controller_Plugin_Abstract中添加了一个predispatch函数来检查用户登录状态。
public function preDispatch(Zend_Controller_Request_Abstract $request) {
if (!$logined){
$request->setControllerName('auth')->setActionName('login');
}
}
如果用户未登录,他们会转移到登录页面,但是网址仍显示用户点击的其他网址。我想处理此predispatch插件中的所有内容,而不是在其他所有操作/控制页面中进行重定向。有解决方案吗
谢谢。
答案 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)
脚本启动后,操作控制器和操作只会影响内部路由。
要更改网址,您需要触发实际的重定向。