【发布时间】:2017-10-09 12:57:27
【问题描述】:
我需要能够在用户登录时将数据传递给所有视图。
这是我的AppServiceProvider 目前的样子:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
if (Auth::check())
{
View::share('key', 'value');
}
}
}
但是,数据永远不会传递给视图,因为我不能在AppServiceProvider 中使用Auth(出于某种原因),因此永远不会满足 if 语句条件。
按照我找到的previous solution,我尝试这样做:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::composer('*', function ($view)
{
if (Auth::check())
{
View::share('key', 'value');
}
}
}
}
这可行,但问题是每当呈现视图时都会调用闭包。
例如,如果我的刀片模板包含 3 个其他刀片模板(确实如此),那么上面的闭包将被调用 4 次。 Explained further here.
那么如何在AppServiceProvider中正确访问用户呢?
【问题讨论】:
-
在加载服务提供者时,似乎还没有设置身份验证机制。我能想到的唯一解决方法是为
'Illuminate\Auth\Events\Login'事件添加一个处理程序,它将键和值存储到会话中。然后,您只需将其从视图中的会话中取出。
标签: laravel laravel-5 laravel-5.3