Laravel的視圖組合器頗有用,在網站中, 許多頁面的側邊欄是相同的,將側邊欄公用部分提取出來確定是必須的,讓Controller專一於業務邏輯。
參考:https://laravel.com/docs/5.5/...php
建立一個新的 provider類 ViewComposerServiceProviderlaravel
php artisan make:provider ViewComposerServiceProvider
編輯ViewComposerServiceProvider類文件中boot()方法,添加以下代碼:數組
// 參數'*':表明全部視圖,其實能夠指定視圖 // \App\Http\ViewComposers\PublicComposer:公共視圖的業務邏輯,目錄位置是自定義的 \View::Composer('*', '\App\Http\ViewComposers\PublicComposer');
在ConfigApp.php配置文件中配置$provider數組,加入自定義的ViewComposerServiceProvider類緩存
App\Providers\ViewComposerServiceProvider::class
編輯AppHttpViewComposersPublicComposer類文件中compose()方法,添加公共數據的業務邏輯composer
public function compose(View $view) { $categories = $this->cache('categories', function () { // 獲取數據邏輯 return Category::all(); }, 60*24); $tags = $this->cache('tags', function () { return Tag::all(); }, 60*24); // $view->with()方法綁定參數到視圖 $view->with(compact('categories', 'tags')); } // 封裝一個緩存處理方法 private function cache($key, $callback, $time = 60) { $key_result = []; if (Cache::has($key)) { $key_result = Cache::get($key); } else { $key_result = $callback(); Cache::put($key, $key_result, $time); } return $key_result; }
原文連接:http://www.mi360.cn/articles/4ide