因此对Controller :: redirect进行了更改,现在它在调用控制器动作后触发。因此,如果您要在触发逻辑之前重定向某人(例如未登录的人),将不再可能。有谁知道如何模拟旧的2.X行为,对Controller :: redirect的调用将立即停止所有操作并重定向?
键是return
到$this->redirect()
的调用,它将立即从控制器返回一个响应对象,这将使Dispatcher理解您要立即终止该请求:
return $this->redirect($url);
可以从控制器动作本身或控制器中的任何回调(beforeFilter
,beforeRender
,afterFilter
...)进行重定向。还可以从任何组件回调中返回重定向值。
如果用户未登录,有三种可能的方法来重定向用户。我在我的应用程序中完成了它。首先是使用控制器的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函数中。通过使用以上技巧,如果用户未登录,则可以防止用户访问您的逻辑。
我只是有同样的问题。最后我得到了很好的header()
函数以及die()
header('Location: http://example.com/whatever');
die;