将信息添加到布局而无需在每个控制器上调用它

时间:2018-01-01 16:48:28

标签: php laravel blade

我有一个登录时使用的布局。menu.blade.php

然后我在刀片文件@extends('admin.layouts.menu')

中使用它

我想在布局中显示一些信息,让我们说出"消息附近的消息数量"菜单中的链接。我可以通过添加:

轻松完成此操作
$message_count = Message::where("user_id", Auth::user()->id)->count();

并将<div>{{$message_count}}</div>添加到menu.blade.php

到每个控制器并查看使用布局的位置,但这显然不是一种干净的方法。

有没有办法在一个步骤中将信息传递给视图,而不是必须在每个控制器中执行?

1 个答案:

答案 0 :(得分:3)

使用view composers

  

视图组合器是在呈现视图时调用的回调或类方法。如果每次渲染视图时都希望将数据绑定到视图,则视图编辑器可以帮助您将该逻辑组织到一个位置

在服务提供商中注册视图编辑器:

public function boot()
{
    View::composer('menu', function ($view) {
        $view->with('messagesCount', auth()->user()->messages->count())
    });
}

然后,每次呈现menu视图时,它都会有$messagesCount变量,其中包含经过身份验证的用户的已计数消息。