【问题标题】:Cakephp-3.0 Possible to redirect immediately?Cakephp-3.0 可以立即重定向吗?
【发布时间】:2015-04-07 00:33:16
【问题描述】:

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

【问题讨论】:

  • 你不能只在你的控制器动作中通过$this->redirect('...') 调用它吗? (不确定语法)
  • 看起来在重定向后返回可能有效,但是;我从控制器调用的方法中调用它......所以这不能解决我的问题。
  • 然后返回该方法的返回值,或者使用事件,或者在你的秘密场景中可能合适的任何东西......
  • 即使在 2.x 应用程序中,您也应该已经为所有重定向使用了“return”。

标签: cakephp cakephp-3.0


【解决方案1】:

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

return $this->redirect($url);

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

【讨论】:

    【解决方案2】:

    如果用户未登录,有三种可能的方式来重定向用户。我在我的应用程序之一中做到了。首先是使用控制器的 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 函数中。通过使用上述技巧,您可以防止用户在未登录时访问您的逻辑。

    【讨论】:

      【解决方案3】:

      我也遇到了同样的问题。最后我得到了很好的 header() 函数和 die()

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-06
        • 2022-11-18
        • 1970-01-01
        • 2013-09-27
        • 2014-05-11
        • 1970-01-01
        • 2015-04-22
        • 2013-09-29
        相关资源
        最近更新 更多