Содержание
скрыть
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());
});
}