2017-06-01 181 views
0

基本上这是我的控制器的__construct。当未登录的用户尝试在该控制器中访问路由时,他基本上被重定向到登录路由。到目前为止这么好 - 如果条件正在工作,重定向工作,路由正在工作。Laravel 5.4如果语句在__construct()中不起作用

所以下次我尝试检查,如果用户访问令牌是有效的,如果它不是,我将他重定向到注销路线 - 简化我的例子,我不这样做,而是我是否$ test_var等于1并重定向到登录,因为我们已经知道此路由名称正在工作。

无论是第一如果($ test_var == 1),没有第二如果($ test_var == 1)触发 - 有没有重定向或死亡。

我甚至尝试如果(1 == 1) ..

我甚至想:

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

,它仍然不会触发。这真是奇怪,因为如果我不先登录如果(isset ...工作和重定向,但这段代码是做什么,如果我在我登录:!

貌似如果的问题,但是这超出如果量子obviosly理论..

这是构建的全码:。

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

回答

1

我认为,如果statment作品,问题会在重定向至少在L4 .2我有同样的问题,只有重定向不工作。

在laravel 4.2作品发送(),但我没有在L5使用它,所以pleasy尝试,如果它的工作原理:

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

谢谢。它以这种方式解决了问题。我仍然无法解释我的自我为什么某个地方重定向没有发送()。 –

+1

问题是,重定向是在构造函数中调用的。它以某种方式重写重定向动作。 –

+2

@АтанасАтанасов请记住,您从构造函数返回的任何值都将被忽略。这仅仅是因为'send'方法在发送重定向头之后可能会退出脚本。 – Furgas

1

您的会话不会被加载。编辑您的控制器__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); 
}); 

或更改应用程序\ HTTP \ Kernel.php到

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

名称为login您登录路由那就试试这个:

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

+0

问题不在于重定向,因为如果用户未登录,它将重定向。但是,如果用户登录,下一个如果不起作用。就像他们根本就没有。 –