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);
重定向可以通过控制器操作本身或控制器中的任何回调完成(beforeFilter
、beforeRender
、afterFilter
...)。还允许从任何组件回调返回重定向值。
我刚遇到同样的问题。我最终得到了很好的旧 header()
函数以及 die()
header('Location: http://example.com/whatever');
die;
因此对 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);
重定向可以通过控制器操作本身或控制器中的任何回调完成(beforeFilter
、beforeRender
、afterFilter
...)。还允许从任何组件回调返回重定向值。
我刚遇到同样的问题。我最终得到了很好的旧 header()
函数以及 die()
header('Location: http://example.com/whatever');
die;