Cakephp-3.0 可以立即重定向吗?

Cakephp-3.0 Possible to redirect immediately?

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

如果用户未登录,可以通过三种可能的方式重定向用户。我在我的应用程序之一中做到了这一点。首先是使用控制器的 beforeFilter() 。你可以使用 like

public function beforeFilter(){
 parent::beforeFilter();
 if(empty($this->logged_in)){
   //your redirect code or your logic
 }
}

它在您的控制器操作被调用时第一次执行。 其次,您可以创建 class 的构造函数。它也首先执行。

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 函数中。通过使用上述技巧,您可以阻止用户在未登录的情况下访问您的逻辑。

关键是 return $this->redirect() 调用,这将 return 立即从控制器发出响应对象,这将使 Dispatcher 了解您想要立即终止请求:

return $this->redirect($url);

重定向可以通过控制器操作本身或控制器中的任何回调完成(beforeFilterbeforeRenderafterFilter ...)。还允许从任何组件回调返回重定向值。

我刚遇到同样的问题。我最终得到了很好的旧 header() 函数以及 die()

header('Location: http://example.com/whatever');  
die;