10.Laravel使用視圖組合器(View composer)

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

相關文章
相關標籤/搜索