【问题标题】:Making object accessible throughout application使对象在整个应用程序中都可访问
【发布时间】:2017-01-20 22:43:22
【问题描述】:

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

【问题讨论】:

标签: laravel laravel-5.2


【解决方案1】:

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

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

现在您的所有视图中都会包含变量$notifications。如果您希望它用于特定的,只需将 * 替换为视图名称。

【讨论】:

  • 这看起来像是我需要的解决方案类型。但是有一个问题,我如何让用户使用这个启动功能?即使我得到了当前用户,即使我做了我已经更新了 OP 的操作,它似乎也不喜欢它。
猜你喜欢
  • 2011-10-29
  • 2019-12-22
  • 2017-07-02
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
相关资源
最近更新 更多