2017-06-01 182 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

問題不在於重定向,因爲如果用戶未登錄,它將重定向。但是,如果用戶登錄,下一個如果不起作用。就像他們根本就沒有。 –