在 Laravel ComposerSeriveProvider 中使用 Auth::user()
Using Auth::user() in Laravel ComposerSeriveProvider
我有一个边栏,我想在其中显示登录用户最喜欢的主题。
我正在使用 ComposerServiceProvider 在视图中设置用户数据:
public function boot(UserRepository $userRepository)
{
if(Auth::check()) {
view()->composer('common.sidebar', function ($view) use($userRepository) {
$view->with('topics', $userRepository->getRecentFollowingTopics(Auth::user()));
});
}
}
但是正如文档所说,这将在其他服务之前加载,例如 Auth,因此 Auth::check()
在这里不起作用。正如他们还写的那样:
https://github.com/laravel/framework/issues/7600
如何使用 ViewComposers 检查用户身份验证?还有任何其他建议。
在您的引导功能中 Auth
尚未可用,这是正确的。
但是,在你的闭包中它是!因此,只需将您的代码重构为:
// Notice the dependency injection of the Guard! Don't forget to import it on top of your Service Provider
public function boot(Guard $auth, UserRepository $userRepository)
{
view()->composer('common.sidebar', function ($view) use($auth, $userRepository) {
if($auth->check()) {
$view->with('topics', $userRepository->getRecentFollowingTopics($auth->user()));
}
});
}
在这种情况下,如果 $auth->user()
应该是 null
(它是,如果没有用户登录)并检查模板中的 isNull($topics)
。
此外,您知道吗,在 Laravel 5 中,您可以像这样将 类 直接注入 blade:
@inject('userRepository', 'App\UserRepository')
然后使用它,例如,像这样:
@if(!is_null($topics = $userRepository->getRecentFollowingTopics(auth()->user())))
@foreach ($topics as $topic)
....
@endforeach
@else
show whatever you like
@endif
我有一个边栏,我想在其中显示登录用户最喜欢的主题。
我正在使用 ComposerServiceProvider 在视图中设置用户数据:
public function boot(UserRepository $userRepository)
{
if(Auth::check()) {
view()->composer('common.sidebar', function ($view) use($userRepository) {
$view->with('topics', $userRepository->getRecentFollowingTopics(Auth::user()));
});
}
}
但是正如文档所说,这将在其他服务之前加载,例如 Auth,因此 Auth::check()
在这里不起作用。正如他们还写的那样:
https://github.com/laravel/framework/issues/7600
如何使用 ViewComposers 检查用户身份验证?还有任何其他建议。
在您的引导功能中 Auth
尚未可用,这是正确的。
但是,在你的闭包中它是!因此,只需将您的代码重构为:
// Notice the dependency injection of the Guard! Don't forget to import it on top of your Service Provider
public function boot(Guard $auth, UserRepository $userRepository)
{
view()->composer('common.sidebar', function ($view) use($auth, $userRepository) {
if($auth->check()) {
$view->with('topics', $userRepository->getRecentFollowingTopics($auth->user()));
}
});
}
在这种情况下,如果 $auth->user()
应该是 null
(它是,如果没有用户登录)并检查模板中的 isNull($topics)
。
此外,您知道吗,在 Laravel 5 中,您可以像这样将 类 直接注入 blade:
@inject('userRepository', 'App\UserRepository')
然后使用它,例如,像这样:
@if(!is_null($topics = $userRepository->getRecentFollowingTopics(auth()->user())))
@foreach ($topics as $topic)
....
@endforeach
@else
show whatever you like
@endif