首页 > 解决方案 > Laravel 在哪里放置一个数据库函数以包含在所有页面(路由)中?

问题描述

我有一个 laravel 应用程序,它已经有几个路由、一些控制器和这些控制器内部的一些功能。

我想要做的是从数据库中获取一些数据并希望在所有页面(路由)中使用这些数据。

function getNotifications() 
{
    $notifications = Notification::all();
    return $notifications;
}

我想在所有页面(路由)中使用$notifications 。我应该把那个功能放在哪里?我也想遵循 DRY 原则。所以我把这个函数放在中间件中,它就可以工作了。但我看到建议中间件不应该用于这种目的。我认为辅助功能也不是要走的路。

任何想法?

我希望你能理解我的问题。我首先编写了所有其他功能,最后编写了通知功能。通知需要显示在所有页面中。

标签: laravel

解决方案


你需要的是一个 Laravel 视图作曲家

class UserComposer
{
    public function compose(View $view)
    {
        $user = Auth::user();

        $view->with([
            'user' => $user,
            'notifications' => $user ? $user->unreadNotifications : null,
        ]);
    }
}

在 ComposerServiceProvider 的 boot 方法中

View::composer(
    '*',
    \App\Http\ViewComposers\UserComposer::class
);

现在您可以在所有视图中访问 $notifications

来自文档的更多帮助 https://laravel.com/docs/5.6/views#view-composers


推荐阅读