如何获取有关服务提供商中已登录用户的信息?当我在我的模板{{$ test}}中使用它时,总是返回0,但我100%确定我已登录。或者mybe你有更好的解决方案吗?
use Illuminate\Support\ServiceProvider;
use Auth;
use View;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
$user = Auth::user();
if ($user !== null) {
$walletsCount = $user->wallets()->count();
} else {
$walletsCount = 0;
}
View::share('test', $walletsCount);
}
}
答案 0 :(得分:1)
默认情况下,您无法在请求生命周期的早期访问会话。 web
中间件组有一个StartSession
中间件,负责实际启动和加载会话。默认情况下,Auth
系统web
后卫使用会话来存储用户。因此您还无权访问会话,因此用户将返回null
。该请求甚至还没有进入那堆中间件。
您可以添加中间件来执行此操作。将中间件添加到web
堆栈的末尾。当这个中间件运行时,堆栈中的先前中间件已经加载了会话,因此您可以访问那里经过身份验证的用户。
如果这就像一个布局,你需要这个变量,你可以使用视图编辑器。根据您的需要,有一些选择。
答案 1 :(得分:1)
它正在发生,因为当Laravel加载服务提供商时,auth功能尚未初始化。处理它的一种方法是将逻辑移到视图中:
{{ auth()->check() ? auth()->user()->wallets()->count() : 0 }}
另一种方法是使用带闭包的视图编辑器:
public function boot()
{
view()->composer('*', function($view) {
$view->with('walletsCount', auth()->check() ? auth()->user()->wallets()->count() : 0);
});
}