Laravel 5.4如果语句在__construct()中不起作用

时间:2017-06-01 09:50:36

标签: php laravel redirect paradox construct

基本上这是我控制器的__construct。当非登录用户尝试访问该控制器中的路径时,他基本上被重定向到登录路由。到目前为止一切都很好 - 如果条件正常,重定向正在工作,路由正在运行。

接下来我尝试检查用户访问令牌是否有效,如果不是,我会将他重定向到注销路由 - 为了简化我的示例,我不这样做但我会检查$ test_var是否等于1并重定向到登录,因为我们已经知道这个路由名称正常。

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

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

我甚至试图:

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

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

看起来如果是问题所在,但是如果超出量子理论的话呢?

这是构造的完整代码:

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);
}

3 个答案:

答案 0 :(得分:1)

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

在laravel 4.2中的作品是send(),但我还没有在L5中使用它,所以如果有效的话,请尽量尝试:

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

答案 1 :(得分:0)

您的会话未加载。将您的控制器__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,
];

答案 2 :(得分:-1)

将您的登录路线命名为login,然后尝试:

重定向() - >路线( '登录');