Laravel - 如何在 AppServiceProvider 中获取当前用户

因此,我通常会让当前用户使用,并且当我确定用户是否实际登录时。但是,这似乎在我的.我正在使用它来共享所有视图中的数据。我俩和登录时,我得到和.Auth::user()Auth::checkAppServiceProvidervar_dumpAuth::user()Auth::check()NULLfalse

如何让当前用户进入我的?如果这是不可能的,那么如何获取所有视图中每个用户唯一的数据(根据 不同而不同的数据)。这是我的代码,用于澄清。AppServiceProvideruser_id

if (Auth::check()) {
        $cart = Cart::where('user_id', Auth::user()->id);
        if ($cart) {
            view()->share('cart', $cart);

        }
    } else {
        view()->share('cartItems', Session::get('items'));
    }

答案 1

Laravel 会话在中间件中初始化,因此您无法从服务提供商处访问会话,因为它们在请求生命周期中的中间件之前执行

您应该使用中间件从会话中共享您的变量

但是,如果出于其他原因,您希望在服务提供程序中执行此操作,则可以使用带有回调的视图编辑器执行此操作,如下所示:

public function boot()
{
    //compose all the views....
    view()->composer('*', function ($view) 
    {
        $cart = Cart::where('user_id', Auth::user()->id);
        
        //...with this variable
        $view->with('cart', $cart );    
    });  
}

仅当实际组合视图时,才会执行回调,因此中间件将已经执行,会话将可用


答案 2

在 的函数中编写这些代码行AuthServiceProviderboot()

public function boot()
{
    view()->composer('*', function($view)
    {
        if (Auth::check()) {
            $view->with('currentUser', Auth::user());
        }else {
            $view->with('currentUser', null);
        }
    });
}

这里的意思是 - 在您的所有视图中变量都可用。*$currentUser

然后,从视图文件将为您提供用户信息(如果用户已通过身份验证),否则为 null。{{ currentUser }}


推荐