根据Laravel文档https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors我无法再访问构造中的会话,因为中间件尚未加载,他们提供了一个我无法理解的示例
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->projects = Auth::user()->projects;
return $next($request);
});
}
如何在该函数中访问我的会话?,解释就可以了
Laravel文档指出,您无法再在构造函数中访问中间件,因为它尚未加载。
通过使用特定的闭包,你实际上是在强制 php(和 Laravel)加载你在闭包中的任何逻辑作为中间件。看看Laravel提供的基本控制器类,看看你是否可以连接这些点。
从本质上讲,你正在破解框架。
话虽如此,这确实是一种糟糕的做法,您不应该在控制器的构造函数中调整会话。
将其放在将处理请求的控制器的__construct()
函数中。
public function __constrcut(){
//changing language accordding to session
$this->middleware(function($request,$next){
app::setLocale(Session::get('locale'));
return $next($request);
});
此代码用于根据会话更改语言 我使用的版本 laravel 5.5 注意:您必须先调用 middelware,然后使用会话作为构造函数,看不到会话这对我有用