Cod*_*rts 15 php authentication service-provider laravel laravel-5
所以我通常会使用当前用户Auth::user(),当我确定用户是否实际登录时Auth::check.然而,这似乎不适用于我的AppServiceProvider.我用它来跨所有视图共享数据.我var_dump都Auth::user()和Auth::check()登录时,我得到NULL和false.
如何让当前用户进入我的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'));
}
Run Code Online (Sandbox Code Playgroud)
Mop*_*ppo 25
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 );
});
}
Run Code Online (Sandbox Code Playgroud)
只有在实际组成视图时才会执行回调,因此中间件将已经执行并且会话将可用
Man*_*ash 17
InAuthServiceProvider的boot()函数写这几行代码
public function boot()
{
view()->composer('*', function($view)
{
if (Auth::check()) {
$view->with('currentUser', Auth::user());
}else {
$view->with('currentUser', null);
}
});
}
Run Code Online (Sandbox Code Playgroud)
这*意味着 - 在您的所有视图中$currentUser变量都可用。
然后,{{ currentUser }}如果用户已通过身份验证,则从视图文件将为您提供用户信息,否则为空。