Laravel的视图组合器很有用,在网站中, 许多页面的侧边栏是相同的,将侧边栏公用部分提取出来肯定是必须的,让Controller专注于业务逻辑。

参考:https://laravel.com/docs/5.5/...

创建一个新的 provider类 ViewComposerServiceProvider

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()方法,添加公共数据的业务逻辑

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/4