Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel Composer SeriveProvider中使用Auth::user()_Php_Laravel - Fatal编程技术网

Php 在Laravel Composer SeriveProvider中使用Auth::user()

Php 在Laravel Composer SeriveProvider中使用Auth::user(),php,laravel,Php,Laravel,我有一个侧边栏,我想在那里显示登录用户最喜欢的主题 我正在使用Composer ServiceProvider在视图中设置用户数据: public function boot(UserRepository $userRepository) { if(Auth::check()) { view()->composer('common.sidebar', function ($view) use($userRepository) { $view-

我有一个侧边栏,我想在那里显示登录用户最喜欢的主题

我正在使用Composer ServiceProvider在视图中设置用户数据:

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()
在这里不起作用。正如他们所写的:


如何使用ViewComposer检查用户身份验证?还有任何其他建议。

您的启动功能中的
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()));
        }
    });
}
在这种情况下,我可能还会重构
getRecentFollowingTopics
函数,以返回
null
如果
$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
然后使用它,例如,如下所示:

@inject('userRepository', 'App\UserRepository')
@if(!is_null($topics = $userRepository->getRecentFollowingTopics(auth()->user())))
    @foreach ($topics as $topic)
    ....
    @endforeach
@else
    show whatever you like
@endif

非常好用,谢谢!也不知道关于
@inject
:)