美文网首页
Laravel视图组件共享数据

Laravel视图组件共享数据

作者: 老王谈编程 | 来源:发表于2017-11-23 12:17 被阅读0次

    做项目时会共享一些数据,比如布局文件中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>
    
    • 收拾工具,回家吃饭

    相关文章

      网友评论

          本文标题:Laravel视图组件共享数据

          本文链接:https://www.haomeiwen.com/subject/xizavxtx.html