Фоновый вывод динамической информации на всех страницах
View Composers будет кстати, когда какие-то данные являются общими для для многих или вообще всех страниц. Примеры: навигация или блок с популярными статьями и т.п. Именно для таких случаев в Laravel предусмотрено элегантное решение. Так же хорошим моментом для производительности является то, что без визуального вывода код композера так же не срабатывает. Создадим шаблон для вывода:
resources/views/layouts/sidebar.blade.php
Добавим код для вывода статей
@foreach ($articles as $article)
{{ $article->active_from }}
{{ $article->code }}
{{ $article->name }}
@endforeach
Вызовем шаблон в общем шаблоне сайта (или любом другом):
...
@include('layouts.articles')
...
Добавим поставщика в массив "providers" файла конфигурации "config/app.php":
...
'providers' => [
...
AppProvidersComposerServiceProvider::class,
],
...
Создаем провайдер:
app/Providers/ComposerServiceProvider.php
Добавляем в него наш новый View Composer:
namespace AppProviders;
use IlluminateSupportFacadesView;
use IlluminateSupportServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
public function register()
{
}
public function boot()
{
View::composer(
'layouts.sidebar',
'AppHttpViewComposersShowSideBar'
);
}
}
Создаем View Composers:
app/Http/ViewComposers/ShowSideBar.php
Добавляем в него код получения статей:
namespace AppHttpViewComposers;
use App;
use AppModelsArticle;
use IlluminateViewView;
class ShowSideBar
{
public function compose(View $view)
{
$articles = Article::where('active', 1)
->orderBy('date')
->take(10)
->get();
return $view->with(['articles' => $articles]);
}
}
Теперь на каждой странице сайта вы должны видеть список статей и не вам не нужно повторять его получение в контроллерах страниц.
← Назад