因此对Controller :: redirect进行了更改,现在它会在您调用控制器操作后触发。因此,如果您想要在触发逻辑之前重定向某人(例如未登录),则不再可能。有谁知道如何模拟旧的2.X行为,其中对Controller :: redirect的调用会立即停止所有内容并重定向?
答案 0 :(得分:5)
关键是return
$this->redirect()
调用,它将立即从控制器返回一个响应对象,使Dispatcher明白你想立即终止请求:
return $this->redirect($url);
重定向可以从控制器操作本身或控制器中的任何回调(beforeFilter
,beforeRender
,afterFilter
...)完成。任何组件回调也允许返回重定向值。
答案 1 :(得分:0)
如果他没有登录,有三种方法可以重定向用户。我做了一个我的应用程序。首先是使用控制器的beforeFilter()。你可以使用像
public function beforeFilter(){
parent::beforeFilter();
if(empty($this->logged_in)){
//your redirect code or your logic
}
}
在第一次调用控制器操作时执行。 其次,您可以创建类的构造函数。它也在第一时间执行。
public function __construct( $request = null, $response = null ) {
parent::__construct( $request = null, $response = null );
//Your redirect code if user not logged in
}
您可以在AppController beforeFilter()中编写代码;但是,如果您只想阻止未登录的用户访问某些功能,则应使用Auth组件允许功能。语法是
$this->Auth->allow(array('action_name_1','action_name2'));
在beforeFilter函数中粘贴此allow函数。通过使用上述技巧,您可以阻止用户在未登录时访问您的逻辑。
答案 2 :(得分:0)
我只是遇到了同样的问题。最后,我使用了不错的header()
函数和die()
header('Location: http://example.com/whatever');
die;