Cakephp-3.0是否可以立即重定向?

问题描述 投票:3回答:3

因此对Controller :: redirect进行了更改,现在它在调用控制器动作后触发。因此,如果您要在触发逻辑之前重定向某人(例如未登录的人),将不再可能。有谁知道如何模拟旧的2.X行为,对Controller :: redirect的调用将立即停止所有操作并重定向?

cakephp cakephp-3.0
3个回答
5
投票

键是return$this->redirect()的调用,它将立即从控制器返回一个响应对象,这将使Dispatcher理解您要立即终止该请求:

return $this->redirect($url);

可以从控制器动作本身或控制器中的任何回调(beforeFilterbeforeRenderafterFilter ...)进行重定向。还可以从任何组件回调中返回重定向值。


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函数中。通过使用以上技巧,如果用户未登录,则可以防止用户访问您的逻辑。


0
投票

我只是有同样的问题。最后我得到了很好的header()函数以及die()

header('Location: http://example.com/whatever');  
die;  
© www.soinside.com 2019 - 2024. All rights reserved.