@Kerm

Является ли хорошим решением вывод результата из контролера напрямую в шаблоне blade?

Я новичек в Laravel, в процессе создания сайта возникла необходимость создания модуля отвечающего за вывод горизонтального, вертикального меню категорий и разделов сайта, включая подвал сайта. Отмечу, что под модулем я подразумеваю компонент сайта, который можно подключить и вывести в любом месте шаблона.

Я создал контроллер, класс для контроллера, свои шаблоны для контроллера.

И вывожу в шаблоне, в нужном мне месте, результат такой строчкой кода, к примеру в header.blade.php:
{{(new App\Http\Controllers\MenuController)->init('horizontal')}}

Я сначала хотел выводить через переменные типа {{$menu_horizontal}}, но меня смутило то что скажем в контроллере главной страницы IndexController.php я должен буду обращаться к другому контроллеру, когда гуглил нашел запись что обращение из одного контроллера к другому не является хорошей практикой и решением и не совсем понял как это реализовать тем более.

В связи с этим вопрос, нормально ли такое обращение из шаблона blade к контролеру или это все ерись и скажем мне стоит лучше в моем модуле отказаться от контроллера и сделать обычный класс+свой шаблон blade и вывод через переменные в нужном мне шаблоне?
  • Вопрос задан
  • 342 просмотра
Решения вопроса 1
В таких случаях лучше использовать inject
@inject('metrics', 'App\Services\MetricsService')

<div>
    Monthly Revenue: {{ $metrics->monthlyRevenue() }}.
</div>

Также этот сервис сделай синглтоном где в конструкторе будет брать данные с бд, а в методах их отдавать таким образом не будет несколько запросов даже если один компонент подключиться на странице несколько раз

P.S. Здесь в ответах был еще вариант расшарить переменные в провайдере но автор почему-то удалил его, а вариант вполне неплохой когда код точно есть на каждой странице (например меню)
Так что лучше всего будет попробовать два варианта и потом решить какой удобнее в твоем случае
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
А че не подходит вариант через сервис-провайдер? Я в таких случаях просто пишу в AppServiceProvider
view()->composer(['header', 'footer'],  function($view){
            $view->with('menus', Menu::all());
        });

и все прекрасно работает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы