从laravel中的构造获取语言

从laravel中的构造获取语言,laravel,middleware,multilingual,construct,Laravel,Middleware,Multilingual,Construct,我正在尝试使构造中的选定语言用于该类中的任何函数: 我的路线: Route::group(['prefix' => 'admin', 'middleware' => ['AdminMiddleWare','auth','localization']], function(){ Route::get('/', 'AdminController@index')->name('admin.index'); }); 我的中间件: public function handl

我正在尝试使构造中的选定语言用于该类中的任何函数:

我的路线:

Route::group(['prefix' => 'admin',  'middleware' => ['AdminMiddleWare','auth','localization']], function(){
     Route::get('/', 'AdminController@index')->name('admin.index');
});
我的中间件:

public function handle($request, Closure $next)
{
    if (Session::has('locale') AND array_key_exists(Session::get('locale'), Config::get('languages'))) {
        App::setLocale(Session::get('locale'));
    }
    else {
        App::setLocale(Config::get('app.locale'));
    }
    return $next($request);
}
我的控制器:

public  $lang;

public function __construct()
{        
    $this->lang = Language::where('lang','=',app()->getLocale())->first();
}

public function index()
{
    $lang = $this->lang;        
    return $lang;
}
但是我只得到默认的语言环境

但如果我将控制器更改为:

public function index()
{
    $lang = Language::where('lang','=',app()->getLocale())->first();

    return $lang;
}
它会起作用的


如何构造并在所有功能中使用它???

在Laravel中,在中间件运行之前,控制器被实例化。在中间件有机会检查和存储区域设置值之前,控制器的构造函数正在进行查询

有多种方法可以解决这个问题——重要的是在中间件运行后进行调用。一种方法是在控制器上使用getter方法:

类控制器
{
/**
*@var语言
*/
私人$lang;
公共职能指数()
{
$lang=$this->getLang();
// ...
}
私有函数getLang()
{
如果($this->lang){
返回$this->lang;
}
返回$this->lang=Language::where('lang','=',app()->getLocale())->first();
}
}

我就是这么做的..但是我控制器中的函数不能从$this->lang获取对象。。。我必须把Language::where('lang','=',app()->getLocale())->first();For me works:public function uu construct(){App::setLocale(request()->lang);}然后在代码App:getLocale()中