Laravel 公共模块数据单独渲染

在项目中,我们会碰到很多类似菜单栏、热门商品、最新消息等等之类的公共的模块,在数据渲染的时候,如果我们每次引入公共模块的时候都分别引入与模块相关的数据的话,未免太麻烦了。

接下来,我就来说下如何为公共模块单独绑定数据

  • 新建公共模块页面 resources/views/widgets/demo.blade.php

    <div>
    {{$common}}
    </div>
  • 新建文件夹 app/Http/ViewCompoers, 然后创建 DemoComposer.php:

    <?php
    namespace App\Http\ViewComposers;
    use Illuminate\View\View;
    class DemoComposer
    {
    public function __construct(Model $model)
    {
        // 此处可以初始化 model 或者 repository
        $this->model = $model;
    }
    
    public function compose(View $view)
    {
        // 此处获取数据
        $common = 'this is common demo data';
    
        // 需要渲染的数据
        $view->with('common', $common);
    }
    }
  • 新建一个新的服务提供者 ComposerServiceProvider

php artisan make:provider ComposerServiceProvider

编辑:

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
class ComposerServiceProvider extends ServiceProvider
{

    public function boot()
    {
        // 组件数据绑定组件视图文件
        View::composer('widgets.demo', 'App\Http\ViewComposers\DemoComposer');
    }

    public function register(){}
}

ok! 完成~~~ 🌤 ☁ 🌈