Laravel视图组件共享数据

做项目时会共享一些数据,比如布局文件中layouts/_sidebar.blade.php的菜单数据在每个页面都会显示,那么在laravel中就可以使用视图组件

  • 创建视图服务提供器
$ php artisan make:provider ComposerServiceProvider
  • 编写服务提供器
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        // 需要绑定数据的模板文件
        view()->composer('layouts._sidebar', 'App\Http\ViewComposers\MenuComposer');
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

  • 创建app/Http/ViewComposer/MenuComposer.php
<?php

namespace App\Http\ViewComposers;

use Illuminate\Contracts\View\View;

class MenuComposer
{
    protected $menus;

    public function __construct()
    {
        $this->menus = [
            route('students.index') => '学生列表',
            route('students.create') => '新增学生',
        ];
    }

    // 将数据渲染到视图中
    public function compose(View $view)
    {
        // 渲染数据
        $view->with('menus', $this->menus);
    }
}
  • 注册提供器:config/app.php
'providers' => [
        /*
         * Application Service Providers...
         */
        App\Providers\ComposerServiceProvider::class,
],
  • 视图文件中读取:resource/views/layouts/_header.blade.php
<div class="col-md-3">
    <div class="list-group">
        @if(isset($menus) && count($menus) > 0)
            @foreach($menus as $key=>$menu)
                <a href="{{ $key }}" class="list-group-item @if(\Request::url() === $key) active @endif">{{ $menu }}</a>
            @endforeach
        @endif
    </div>
</div>
  • 收拾工具,回家吃饭
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容