【问题标题】:Laravel 5.4 If statement doesn't work in __construct()Laravel 5.4 If 语句在 __construct() 中不起作用
【发布时间】:2017-11-02 09:45:35
【问题描述】:

基本上这是我的控制器的__construct。当非登录用户尝试访问此控制器中的路由时,他基本上被重定向到 login 路由。到目前为止一切顺利 - 如果条件有效,重定向有效,路由有效。

所以接下来我尝试检查用户访问令牌是否有效,如果不是,我会将他重定向到 logout 路线 - 为了简化我的示例,我不这样做,而是检查 $ test_var 等于 1 并重定向到 login,因为我们已经知道此路由名称有效。

既不是第一个 if($test_var == 1),也不是第二个 if($test_var == 1) 触发器 - 没有重定向或死亡。

我什至尝试过 if(1==1) ..

我什至尝试过:

 if(isset($this->userCredentials))
         return redirect('login');

它仍然没有触发。真的很奇怪,好像我没有先登录 if(!isset... 正在工作并重定向,但是如果我登录了,这段代码什么也不做:

看起来 If 是问题所在,但这个 If 显然超出了量子理论..

这是构造的完整代码:

namespace App\Http\Controllers;

use Input; 
use Session;
use Auth;
use Redirect;

class stackoverflowController extends ConnectionController
{

public function __construct()
{
    $this->middleware('auth');


    $this->userCredentials = Session::get('userCredentials');


    if(!isset($this->userCredentials))
        return redirect('login');

    $test_var = 1;

    if($test_var == 1)
        return redirect('login');

    if($test_var == 1)
        die(1);

    if(1 == 1)
        die(1);
}

【问题讨论】:

    标签: php laravel redirect paradox construct


    【解决方案1】:

    我认为,如果声明有效,问题将出在重定向上。至少在 L4.2 中我有同样的问题,只是重定向不起作用。

    在 laravel 4.2 中可以使用 send(),但我还没有在 L5 中使用过,如果可以,请尝试:

    return redirect('login')->send();
    

    【讨论】:

    • 谢谢。结果是这样的。我仍然无法解释为什么在没有 send() 的情况下重定向可以工作。
    • 问题是,重定向是在构造函数中调用的。它以某种方式重写了重定向操作。
    • @АтанасАтанасов 请记住,您从构造函数返回的任何值都会被忽略。这仅是因为send 方法可能在发送重定向标头后退出脚本。
    • 感谢您的进一步解释!
    【解决方案2】:

    您的会话未加载。将您的控制器 __construct 编辑为

    $this->middleware(function ($request, $next) {
      $this->userCredentials = Session::get('userCredentials');
    
      if(!isset($this->userCredentials))
        return redirect('login');
    
      $test_var = 1;
    
      if($test_var == 1)
        return redirect('login');
    
      if($test_var == 1)
        die(1);
    
      if(1 == 1)
        die(1);
    
      return $next($request);
    });
    

    或将您的 app\Http\Kernel.php 更改为

    protected $middleware = [
      ...
      \Illuminate\Session\Middleware\StartSession::class,
    ];
    

    【讨论】:

      【解决方案3】:

      将您的登录路径命名为login,然后试试这个:

      redirect()->route('登录');

      【讨论】:

      • 问题不在于重定向,因为如果用户未登录,它会重定向。但如果用户已登录,则下一个 If 不起作用。就像他们根本不存在一样。
      • 接受的答案和我的答案有什么不同? @АтанасАтанасов
      猜你喜欢
      • 2017-05-22
      • 1970-01-01
      • 2012-07-16
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 2016-04-25
      • 1970-01-01
      相关资源
      最近更新 更多