如何在__construct中访问会话?

时间:2017-02-16 07:21:44

标签: laravel

在Laravel 5.3.4中,我无法访问构造中的会话变量。这有什么办法吗?这是我的代码:

    // app/Http/Controllers/Controller.php
    class Controller extends BaseController {
        use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

        public function __construct() {
            $t = Translation::where('language_id', Session::get('language_id') )->get();
            View::share('t', $t);
        }
    }

P.S。我需要在每次加载页面之前为所有控制器和视图加载来自数据库的翻译。

2 个答案:

答案 0 :(得分:4)

在Laravel 5.3中,您无法访问控制器构造函数中的会话或经过身份验证的用户,因为中间件尚未运行。

在您的控制器文件中

public function __construct()
{
    $this->middleware(function ($request, $next) {
            $t = Translation::where('language_id',Session::get('language_id')->get();
            View::share('t', $t);Session::get('language_id');

           return $next($request);
     });
}

答案 1 :(得分:1)

  

你也可以这样写

public function __construct()
{
    $this->middleware(function ($request, $next) {
        if(Session::get('user_id') == NULL)
        {
            return Redirect::to('login');
        }else{
            return $next($request);
        }
    });
}