我有一个laravel应用程序,该应用程序已经具有多个路由,一些控制器以及这些控制器中的某些功能。
我要做的是从数据库中获取一些数据,并希望在所有页面(路由)中使用这些数据。
function getNotifications()
{
$notifications = Notification::all();
return $notifications;
}
我想在所有页面(路线)中使用 $ notifications 。我应该在哪里放置该功能?我也想遵循DRY原则。因此,我将该功能放入了中间件,并且可以正常工作。但我看到建议不要将中间件用于这种目的。我认为辅助功能也不可行。
有什么主意吗?
希望您能理解我的问题。我首先写了所有其他功能,最后写了通知功能。通知需要显示在所有页面中。
答案 0 :(得分:2)
您需要的是Laravel View作曲家
class UserComposer
{
public function compose(View $view)
{
$user = Auth::user();
$view->with([
'user' => $user,
'notifications' => $user ? $user->unreadNotifications : null,
]);
}
}
在ComposerServiceProvider中的启动方法中
View::composer(
'*',
\App\Http\ViewComposers\UserComposer::class
);
现在您可以在所有视图中访问$ notifications
答案 1 :(得分:1)
我希望在路由中使用中间件是最好的选择。首先创建一个中间件
php artisan make:middleware GetNotification
它将在app / http / middleware和内部处理方法中创建GetNotification.php,
public function handle($request, Closure $next)
{
$notifications = Notification::all();
Session::put('notifications', $notifications);
return $next($request);
}
现在您必须在$ routeMiddleware内的app / http / kernel.php中注册它,例如
'getnotification'=> \App\Http\Middleware\GetNotification::class,
现在您可以在名为web.php的路由中使用,将所有路由放入内部
Route::group(['middleware' => ['getnotification']], function () {
....................
.......all routes here
});
您可以通过以下任何方式访问任何视图或刀片文件中的会话:
@if(Session::has('notifications'))
echo {{ Session::get('notifications')}}
@endif
希望有帮助。