欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Laravel View Composer 解决视图公共部分的数据传递 有大用

Laravel View Composer 解决视图公共部分的数据传递

网站开发中,公共部分数据的传递,比如菜单、侧边栏、友情链接之类的。这些公共数据的传递就可以用 view composer 去实现传递,避免里在控制器中重复获取以及传递视图组件需要的数据.

与所有视图共享数据

在服务提供器(AppServiceProvider)中的 boot 方法调用 Illuminate\Support\Facades\View 的 share 方法

<?php
    namespace App\Providers;
    use Illuminate\Support\Facades\View;
    class AppServiceProvider extends ServiceProvider
    {
        public function boot()
        {
            View::share('key',  'value');
        }

        public  function  register() 
        {

        }
    {

视图合成器 viewComposer

第一步 定义视图合成器这个类,通常放在 app/Http/ViewComposers 目录下

<php
    namespace  App\Http\ViewComposers;
    use  Illuminate\View\View;
    use App\Models\Category;

    class ExampleComposer
    {
        protected  $category;

        //使用laravel的依赖注入 自动注入我们需要的类
        public  function  __construct(Category $category) 
        { 
            $this->category  =  $category;
        }
        public  function  compose(View $view) 
        {  
          // 使用 with 方法注入变量  
          $view->with('categories',  $this->category->all());  
        }
    }

第二步 注册视图合成器

在一个服务提供器中去注册视图合成器 例子是在 AppServiceProvider 中注册的 ,不过推荐是为它们生成一个单独的服务提供器

<? php
        .
        .
        .
            public  function  boot()
            {  
            // 当 Laravel 渲染 goods.index 和 goods.show 模板时,就会使ExampleComposer 这个来注入分类变量  
            // 同时 Laravel 还支持通配符,例如 goods.* 即代表当渲染 goods 目录下的模板时都执行这个 ViewComposer
                \View::composer(
                ['goods.index',  'goods.show'],
                \App\Http\ViewComposers\ExampleComposer::class
                );
            }
        .   
        .


来自  https://learnku.com/articles/26010




普通分类: