Laravel学习笔记 ViewComposer

网站一般都有侧栏,用来显示分类,标签,热门文章,热门评论啥的,但是这些侧栏都是相对独立的模块,如果在每一个引入侧栏的视图中都单独导入与视图有关的数据的话,未免太冗余了。。。
所以最佳的做法是:新建一个 widgets 视图文件夹,再利用 Laravel 的 ViewComposers 单独为侧栏绑定数据,这样侧栏就可以随便引入而不用关心数据是否绑定啦~~~

我们先创建一个 ViewComposer 类,通常放在 app/Http/ViewComposers 目录下:

mkdir -p app/Http/ViewComposers
touch app/Http/ViewComposers/CategoryTreeComposer.php
<?php
namespace App\Http\ViewComposers;

use App\Services\CategoryService;
use Illuminate\View\View;

class CategoryTreeComposer
{
    protected $categoryService;

    // 使用 Laravel 的依赖注入,自动注入我们所需要的 CategoryService 类
    public function __construct(CategoryService $categoryService)
    {
        $this->categoryService = $categoryService;
    }

    // 当渲染指定的模板时,Laravel 会调用 compose 方法
    public function compose(View $view)
    {
        // 使用 with 方法注入变量
        $view->with('categoryTree', $this->categoryService->getCategoryTree());
    }
}

定义好 ViewComposer 之后我们还需要告诉 Laravel 要把这个 ViewComposer 应用到哪些模板文件里:
app/Providers/AppServiceProvider.php

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

注意:ViewComposers的方法名是compose,provider中view::composer
可以参考中文文档的视图合成器

你可能感兴趣的:(Laravel学习笔记)