Laravel View Composer 解決檢視公共部分的資料傳遞

周小雲發表於2019-03-23

網站開發中,公共部分資料的傳遞 ,比如選單、側邊欄、友情連結之類的。這些公共資料的傳遞就可以用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() 
        {

        }
    {

第一步 定義檢視合成器這個類,通常放在 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
                );
            }
        .   
        .

相關文章