Laravel - 如何在AppServiceProvider

时间:2016-05-22 08:56:20

标签: php laravel authentication laravel-5 service-provider

所以我通常使用Auth::user()来获取当前用户,当我确定用户是否实际登录Auth::check时。但是,这似乎不适用于我的AppServiceProvider。我用它来跨所有视图共享数据。登录后我var_dump Auth::user()Auth::check()NULLfalse

如何让当前用户进入AppServiceProvider?如果这不可能,那么在所有视图中获取每个用户(根据user_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'));
    }

3 个答案:

答案 0 :(得分:18)

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

您应该使用中间件来分享会话中的变量

如果由于其他原因你想在服务提供商中进行,你可以使用带有回调的view composer,如下所示:

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

只有在实际编写视图时才会执行回调,因此中间件将被执行并且会话将可用

答案 1 :(得分:3)

legacy subid converted licPart count Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL AC CE E-LTU LIC-CP-EN-100 50 Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OB USR E-LTU LIC-CP-EN-100 25 Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OG EP E-LTU LIC-CP-EN-100 25 Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL AC CE E-LTU LIC-CP-EN-100 25 Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OB USR E-LTU LIC-CP-EN-100 25 Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OG EP E-LTU LIC-CP-EN-100 50 Ent 1K EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL AC CE E-LTU LIC-CP-EN-1K 375 Ent 1K EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OB USR E-LTU LIC-CP-EN-1K 375 Ent 1K EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OG EP E-LTU LIC-CP-EN-1K 250 的{​​{1}}函数中编写这些代码行

AuthServiceProvider

此处boot()表示 - 在您的所有观看中public function boot() { view()->composer('*', function($view) { if (Auth::check()) { $view->with('currentUser', Auth::user()); }else { $view->with('currentUser', null); } }); } 变量都可用。

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

答案 2 :(得分:0)

根据我的 Laravel 7 经验,Auth::user()AppServiceProvider.php 中不起作用,而是辅助函数 auth()->user() 对我有用。

public function boot()
    {

        if (auth()->check()) {
            View::composer('layout.app', function ($view) {
                $userName = auth()->user()->name;
                $view->with(['userName' => $userName]);
            });
        }
    }