使应用程序中的对象可访问

时间:2016-09-13 10:48:22

标签: laravel laravel-5.2

我正在向我的系统添加用户通知。要为用户访问这些通知,我调用我在另一个系统中创建的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));
    });
}

1 个答案:

答案 0 :(得分:1)

您可以使用view composer。在App\Providers\AppServiceProvider@boot方法中添加:

view()->composer('*', function ($view) {
    $view->with('notifications', MyAPI::returnNotifications($user->id););
});

现在,您在所有视图中都有变量$notifications。如果您想要特定的,只需将*替换为视图名称。