Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Всем добрый день!
Я являюсь разработчиком на 1С-Битрикс (прошу не кидать в меня тапки), изучаю laravel так как хочется расширить кругозор и очень интересно.
Вроде как по документации многое понятно, но, уперся в следующий момент:
Цель:
- Создание страницы с поблочной информацией, в каждом блоке (список сущностей) выводится не связанная с другими блоками информация (акции/новости/услуги).
Попытка реализации:
- Делаю маршрут для главной страницы на контроллер:
Route::get('/', 'MainPage@show');
- Далее создаю контроллер, но вот на нем фантазия и заканчиватеся, т.к. контроллер один и подразумевает вызов одной "view`хи", а у меня несколько не связанных блоков в целях.
На Битриксе это выглядит так: физическая страница /index.php, на которой я вызываю несколько разных (или одинаковых компонентов с разными шаблонами) компонентов и логика начиная от страницы между этими блоками уже никак не связана.
Т.е. я думал так: Одна страница (маршрут), три вызова компонента (контроллера), три вызова разных шаблонов из компонентов (контрллеров).
Но, мне кажется в Laravel правильная логика совсем иная, я никак не могу догадаться, подскажите пожалуйста какой правильный вариант реализации такой задачи.
Заранее спасибо..
Изменено Goborov (04.12.2020 14:05:29)
Не в сети
Не знаю про биртикс, возможно из-за этого я неправильно вижу саму проблему перехода.
В laravel контроллер может вернуть только один объект view, которому соответствует один шаблон. Всю композицию надо составлять внутри этого шаблона.
В шаблоне можно инклудить блоки (другие шаблоны). Данные для этих блоков можно передать из контроллера одной пачкой сразу для всех блоков, а можно настроить "view composer" чтобы он неявно подбрасывал данные куда надо.
Можно инжектить в шаблон сервис, который нужные данные будет добывать — такой подход правда некоторые участники называют нехорошими словами, но он возможен.
Гуглить "blade include", "blade component", "laravel view composer", "blade service injection"
Изменено artoodetoo (04.12.2020 13:57:23)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
artoodetoo, большое спасибо!
Т.е. если я вас правильно понял, нормальной практикой будет: получение разных данных (акции / услуги / новости) в одном контроллере (возможно с разбивкой на методы класса/отделные классы) с последующим в возвратом всех данных в шаблон и "инклудом подшаблонов" для объеденения в блоки?
--
И, если позволите, еще пару вопросов на тему общего/шаблонного вывода из той же категории.
Если мне нужно вывести инфомрацию в общем шаблоне, к примеру "псоледние статьи", которая будет на каждой странице в одном и том же месте в шаблоне, как я понимаю я должен использовать не контроллер текущией страницы, а некий другой контроллер.
Он создается там же где и обычные контроллеры из роутов? куда его прописать (кто будет вызывать)? он будет так же передавать данные своей вьюхе? данная вьюха будет инклудится общим шалоном (из него)?
Опять же на примере Битрикс, если все упростить: я делаю вызов компонента (контроллера) в шаблона (к примеру footer.php), который выводит через свой/указанный шаблон данные. Но, как я понимаю в Laravel, в шабоне "блейда" контрллеры не вызываются, собственно вопрос, как правильно организовать подобный вывод информации для общего шаблона сайта?
Изменено Goborov (04.12.2020 15:17:56)
Не в сети
@Goborov почитайте про инструкцию @extends в Blade. Через неё можно добиться единообразия в разметке нескольких страниц, при этом НЕ занимаясь копи-пастой. Затем про View Composer чтобы НЕ добывать одни и те же данные в каждом контроллере. Научивщись работать с этими вещами вы сами ответите на свои вопросы. Я не готов вас сопровождать в каждой детали
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Не в сети