Laravel - 如何在 AppServiceProvider 中获取当前用户
Laravel - How to get current user in AppServiceProvider
所以我通常使用 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'));
}
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 );
});
}
只有当视图真正被组合时才会执行回调,因此中间件已经执行并且会话可用
在AuthServiceProvider
的boot()
函数中写下这几行代码
public function boot()
{
view()->composer('*', function($view)
{
if (Auth::check()) {
$view->with('currentUser', Auth::user());
}else {
$view->with('currentUser', null);
}
});
}
此处 *
表示 - 在您的所有视图中 $currentUser
变量可用。
然后,如果用户已通过身份验证,{{ currentUser }}
将为您提供用户信息,否则为空。
根据我的 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]);
});
}
}
所以我通常使用 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'));
}
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 );
});
}
只有当视图真正被组合时才会执行回调,因此中间件已经执行并且会话可用
在AuthServiceProvider
的boot()
函数中写下这几行代码
public function boot()
{
view()->composer('*', function($view)
{
if (Auth::check()) {
$view->with('currentUser', Auth::user());
}else {
$view->with('currentUser', null);
}
});
}
此处 *
表示 - 在您的所有视图中 $currentUser
变量可用。
然后,如果用户已通过身份验证,{{ currentUser }}
将为您提供用户信息,否则为空。
根据我的 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]);
});
}
}