Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 04.03.2016 14:46:37

Множественное расширение шаблона

Доброго времени суток!
Имеется шапка сайта с динамическим содержимым. При запросе URL идет запрос к нескольким таблицам и результаты передаются в разные шаблоны. В итоге работу контроллера можно сокращенно представить сейчас так:

echo View('panel.header'); //открываем все div 
//помещаем в них шаблоны
echo View('panel.header_top', ['data' => $data] );
echo View('panel.layouts.system', ['data' => $data]);
echo View('panel.layouts.profile', ['data' => $data]);
//закрываем div
echo View('panel.header_bottom');

Переменная $data содержит разный набор данных, которые в последствии подставляются в шаблоны.
Вид у этой конструкции меня не устраивает, хотелось бы сделать по-нормальному, но что-то не выходит.
Что пробовал:
Создал шаблон layouts, который содержал html-код с файлов panel.header и panel.header_bottom, а между ними добавил секции @yield('') для каждого из трех шаблонов. В шаблонах прописал @extends('panel.layout') и привел контроллер к виду:

echo View('panel.header_top', ['data' => $data] );
echo View('panel.layouts.system', ['data' => $data]);
echo View('panel.layouts.profile', ['data' => $data]);

*это упрощенный вид, на деле это делается в цикле и шаблонов несколько больше

Однако в этом случае на каждый вывод View в контроллере будет подключаться весь код layout, не распределенный по секциям, т.е. самый верхний шаблон подключается (расширяется) трижды. В итоге это приводит к дублированию div и, как итог - искажению верстки.

Собственно вопрос - как можно вызывать несколько разных шаблонов, передав им разные данные, при этом чтобы код всех этих шаблонов просто "добавился" в прописанные секции yield, не дублируя при этом расширяемый шаблон?
Заранее благодарен за помощь.

Не в сети

#2 05.03.2016 01:43:25

duster
Откуда: Мельбурн
Сообщений: 148

Re: Множественное расширение шаблона

Вообще, вы нарушаете логику Laravel:
— Используя 3 шаблона на один метод контроллера
— Используя echo вместо return

У одной страницы должен быть один view, а структура должна разруливаться внутри шаблона.

Если не подходит общий layout приложения — сделайте для этой страницы отдельный layout.

Не в сети

#3 10.03.2016 20:53:51

Re: Множественное расширение шаблона

Спасибо за ответ!
Насчет нарушения логики согласен, потому и хотелось сделать это все по-нормальному. В итоге создал отдельный layout, все данные собрал в контроллере, отдал их через return layout'у, а уже в нем все динамические данные раскидал по блокам. Я так понимаю, это самый верный способ.

Не в сети

Подвал раздела