如何在檢視中共享變數

MArtian發表於2021-08-20

假設管理後臺有一個欄位是 site_name 使用者可以隨意修改,前端頁面如何在所有檢視中引用它?總不能每次都查詢並向檢視傳參 site_name

我們可以在 AppServiceProvider 分配檢視共享變數

// app/Providers/AppServiceProvider.php

class AppServiceProvider extends ServiceProvider
{
 ...

  public function boot()
  {  
        $site_name = "learnku";
        view()->share('name', $site_name);
  }
  ...
}

這樣就可以在所有的檢視中使用 site_name 變數了。類似 站點名稱版權資訊 這類資料可以使用這種全域性定義,因為站點中所有頁面都會用到它們。


但是類似邊欄 推薦資源 這類資料,大部分頁面也會使用它們,但並不是所有頁面都會使用,如果使用全域性定義,就有些沒必要了。

我們可以把 邊欄 推薦資源 先定義成子檢視 sidebar.blade.php,然後使用 view()->composer() 閉包方法向 sidebar 中傳遞資料,這樣每當呼叫 sidebar 這個檢視時,就會自動載入相關資料

class AppServiceProvider extends ServiceProvider
{
 ...

  public function boot()
  {   
        view()->composer('sidebar', function($view){
            $view->with('recommoned', Recommoned::get());
        });
  }
  ...
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章