【问题标题】:Explain how to use Session In The Constructor Laravel 5.3讲解如何在 Laravel 5.3 构造函数中使用 Session
【发布时间】:2017-01-16 08:19:42
【问题描述】:

根据 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);
    });
}

如何在该函数内访问我的会话? ,一个解释就行了

【问题讨论】:

    标签: php laravel session laravel-5.3 laravel-middleware


    【解决方案1】:

    Laravel 文档指出,您不能再在构造函数中访问中间件,因为它还没有被加载。

    通过使用特定的闭包,您实际上是在强制 php(和 Laravel)将闭包中的任何逻辑加载为中间件。看看 Laravel 提供的basic controller class,看看能不能把这些点连起来。

    本质上,你正在破解框架。

    话虽如此,这确实是一种不好的做法,您不应该在控制器的构造函数中调整会话。

    【讨论】:

    • 好吧,我试图用构造函数中的用户数据初始化一个全局变量,否则我必须从数据库中调用它
    • 为此创建一个中间件,然后将其添加到必要的路由中。构造函数用于初始化该类的属性,仅此而已。
    【解决方案2】:

    将其放在将处理请求的控制器的 __construct() 函数中。

    【讨论】:

    • 我这样做了,但我不确定在哪里分配我的全局变量,我试图从内部访问它并且它确实获得了会话数据,所以我猜分配是在闭包函数内部.
    • 闭包是作用域的,你必须使用($var)`才能正确地作用域。
    【解决方案3】:
     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,然后使用会话作为构造函数看不到会话这对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-04
      • 2017-05-09
      • 2017-05-23
      • 2017-04-07
      • 2018-02-20
      • 1970-01-01
      • 2017-06-01
      相关资源
      最近更新 更多