При использовании laravel как правильно для шаблона страниц готовить элементы на основе данных из БД?
Делаю первый проект с использованием Laravel (то есть изучаю его в процессе). Возник такой вопрос: есть навигационное меню (navbar), которое отображается на всех страницах сайта. Это меню есть результат выборки из БД, так как в БД хранятся страницы и разделы сайта. Выводится оно в главной обвертке (mainwrap.blade.php), общей для всех страниц. Вопрос - в эту обвертку как его передать правильно и где сгенерировать?
В начале сделал в контроллере, из которого потом вызывается view, передав во view переменную, содержащую результат выборки (страницы, разделы). Но если контроллеров несколько, думаю, не правильно в каждом делать так? А как правильно?
Спасибо за совет.
Изучая этот метод прочитал так же, что возможно передать данные во все представления (по Вашей ссылке чуть выше - Sharing Data With All Views):
public function boot()
{
View::share('key', 'value');
}
Этот способ тоже сработает с меню. Но не понятно, в чем разница между таким методом и view composer - на мой взгляд они решают одинаковые задачи. Но видимо есть принципиальная разница между ними, если они оба существуют одновременно?
Zabolots: разница между ними в том, что во view composer передается callback, а в View::share уже готовое значение.
Например, с помощью View::share() вы не сможете пошарить текущего пользователя View::share('user', auth()->user()), потому что на этапе загрузки сервис провайдеров пользователь еще не доступен.
А с помощью view composer легко
View::composer('*', function ($view) {
$view->with('user', auth()->user());
});
так как view composer вызывается перед рендерингом шаблона