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