我正在向我的系统添加用户通知。要为用户访问这些通知,我调用我在另一个系统中创建的API。所以,我的IndexController看起来像下面的
public function index()
{
if ($user = Sentinel::getUser()) {
$notifications = MyAPI::returnNotifications($user->id);
return view('centaur.dashboard', compact('notifications'));
}
}
现在问题是,现在通知仅在仪表板视图上可用。在我的标题视图中,我有类似的东西
@if($notifications)
@foreach($notifications as $notification)
<a class="content" href="#">
<div class="notification-item">
<h4 class="item-title">{{ $notification->subject }}</h4>
<p class="item-info">{{ $notification->body }}</p>
</div>
</a>
@endforeach
@endif
但是,如果我现在访问仪表板页面之外的另一个页面,我会得到一个未定义的变量:通知错误。这是因为标题在每个页面上,但我只是将我的通知对象传递到仪表板页面。
有没有办法让这个通知对象普遍可用?
由于
更新
if($user = Sentinel::getUser()) {
view()->composer('*', function ($view) {
$view->with('notifications', MyAPI::returnNotifications($user->id));
});
}
答案 0 :(得分:1)
您可以使用view composer。在App\Providers\AppServiceProvider@boot
方法中添加:
view()->composer('*', function ($view) {
$view->with('notifications', MyAPI::returnNotifications($user->id););
});
现在,您在所有视图中都有变量$notifications
。如果您想要特定的,只需将*
替换为视图名称。