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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!