Содержание
скрыть
View Composer
Изменим app/Providers/AppServiceProvider.php :
public function boot() { view()->composer(['layouts.category_layout', 'layouts.layout'], function ($view) { $view->with('categories', Category::select('title', 'slug')->withCount('posts')->orderBy('posts_count', 'desc')->get())->with('popularPosts', Post::orderBy('views', 'desc')->limit(3)->get()); }); }
То есть теперь мы передаем переменные $categories, $popularPosts в виды ‘layouts.category_layout’, ‘layouts.layout’ и можем удалить:
$categories = Category::select('title', 'slug')->get();
из всех контроллеров.
$categories мы передаем с количеством постов в каждой категории.
Кэширование
В app/Providers/AppServiceProvider.php
Подключим фасад Cache:
use Illuminate\Support\Facades\Cache;
И кэшируем категории:
public function boot() { view()->composer(['layouts.category_layout', 'layouts.layout'], function ($view) { if (Cache::has('categories')) { $categories = Cache::get('categories'); } else { $categories = Category::select('title', 'slug')->withCount('posts')->orderBy('posts_count', 'desc')->get(); Cache::put('categories', $categories, 30); } $view->with('categories', $categories)->with('popularPosts', Post::orderBy('views', 'desc')->limit(3)->get()); }); }