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
                );
            }
        .   
        .本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           周小云 的个人博客
 周小云 的个人博客
         
             
             
             
                     
                     
             
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: