Cakephp-3.0是否可以立即重定向?
所以对控制器::重定向进行了更改,现在它在调用控制器操作后激发。所以,如果您想在触发逻辑之前重定向某人(例如,未登录的人),这将不再可能。有人知道如何模拟旧的2.X行为吗?在这种行为中,对Controller::redirect的调用会立即停止一切并重定向 如果用户未登录,有三种可能的方法重定向用户。我是用我的一个应用程序做的。首先是使用控制器的beforeFilter()。你可以像Cakephp-3.0是否可以立即重定向?,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,所以对控制器::重定向进行了更改,现在它在调用控制器操作后激发。所以,如果您想在触发逻辑之前重定向某人(例如,未登录的人),这将不再可能。有人知道如何模拟旧的2.X行为吗?在这种行为中,对Controller::redirect的调用会立即停止一切并重定向 如果用户未登录,有三种可能的方法重定向用户。我是用我的一个应用程序做的。首先是使用控制器的beforeFilter()。你可以像 public function beforeFilter(){ parent::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函数中。通过使用上述技巧,您可以防止用户在未登录的情况下访问您的逻辑。关键是
返回调用$this->redirect()
调用,该调用将立即从控制器返回一个响应对象,使调度程序了解您希望立即终止请求:
return $this->redirect($url);
重定向可以通过控制器操作本身或控制器中的任何回调来完成(beforeFilter
,beforeRender
,afterFilter
…)。还允许从任何组件回调返回重定向值。我刚刚遇到了同样的问题。最后我得到了一个很好的header()
函数和die()
您是否可以在控制器操作中通过$this->redirect(“…”)
调用它?(不确定语法)不过,看起来在重定向后返回可能会起作用;我从控制器调用的方法调用它。。。因此,这并不能解决我的问题。然后返回该方法的返回值,或者使用事件,或者在您的秘密场景中合适的任何东西……即使在2.x应用程序中,您也应该已经对所有重定向使用了“return”。
header('Location: http://example.com/whatever');
die;