Laravel 5.4 If 语句在 __construct() 中不起作用
Laravel 5.4 If statement doesn't work in __construct()
基本上这是我的 __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 是问题所在,但这显然超出了量子理论..
这是构造的完整代码:
namespace App\Http\Controllers;
use Input;
use Session;
use Auth;
use Redirect;
class WhosebugController 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);
}
我认为,如果语句有效,问题将出在重定向中。至少在 L4.2 中我遇到了同样的问题,只是重定向不起作用。
在 laravel 4.2 中可以使用 send(),但我还没有在 L5 中使用它,所以请尝试它是否有效:
return redirect('login')->send();
您的会话未加载。将您的控制器 __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,
];
将您的登录路径命名为 login
然后试试这个:
重定向()->路由('login');
基本上这是我的 __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 是问题所在,但这显然超出了量子理论..
这是构造的完整代码:
namespace App\Http\Controllers;
use Input;
use Session;
use Auth;
use Redirect;
class WhosebugController 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);
}
我认为,如果语句有效,问题将出在重定向中。至少在 L4.2 中我遇到了同样的问题,只是重定向不起作用。
在 laravel 4.2 中可以使用 send(),但我还没有在 L5 中使用它,所以请尝试它是否有效:
return redirect('login')->send();
您的会话未加载。将您的控制器 __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,
];
将您的登录路径命名为 login
然后试试这个:
重定向()->路由('login');