Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » MVC + Twig Вопрос по контроллерам

Страниц (1): [1]
 

1. webog - 25 Августа, 2017 - 12:22:50 - перейти к сообщению
Всем добра!

Шел второй час ночи... Задача не решалась... Направьте на путь истинный!? Очень прошу Улыбка

Итак. Есть MVC (роутинг, контроллер и т.д. все как пологается) и шаблонизатор Twig.
Вопрос: Как вывести постоянную информацию (проверка авторизации, сайдбар и прочая инфа) которая нужна на всех страницах сайта во все public function view всех контроллерах?

Сейчас в /controller/home.php выводится вся инфа для главной и инфа для всех страниц.
Но допустим в /controller/account.php нет инфы для всех страниц.

Спасибо всем кто откликнется! Улыбка
2. Ch_chov - 25 Августа, 2017 - 12:33:28 - перейти к сообщению
Создаете базовый шаблон с блоками и наследуете его в других шаблонах переопределяя нужные блоки.
https://twig[dot]symfony[dot]com/doc/2[dot]x[dot][dot][dot]ags/extends[dot]html
3. webog - 25 Августа, 2017 - 12:50:11 - перейти к сообщению
Ch_chov пишет:
Создаете базовый шаблон с блоками и наследуете его


Я так и делаю, но возможно не донца так ))

Проблема в том, что в каждый public function view() каждого контроллера нужно прописывать что нужно вывести на страницу. В новостях - новости, в контактах - контакты и т.д.
Но есть страница типо сайдбара, туда нужно выводить постоянно проверку авторизации (заменять форму на приветствие если есть уже авторизация), статистику и т.д.

Мне в каждую вьюху дописывать это? )) Может есть другой путь?
4. Ch_chov - 25 Августа, 2017 - 13:14:56 - перейти к сообщению
Можно сделать Twig extension и добавить туда функцию для проверки роли текущего пользователя как в Symfony, либо просто добавить глобальную переменную в Twig как в Silex.
5. webog - 25 Августа, 2017 - 14:06:49 - перейти к сообщению
Ch_chov пишет:
Можно сделать Twig extension и добавить туда функцию для проверки роли текущего пользователя как в Symfony, либо просто добавить глобальную переменную в Twig как в Silex.


Можно чуть подробнее!? Пожалуйста Улыбка
6. Ch_chov - 25 Августа, 2017 - 14:19:27 - перейти к сообщению
7. webog - 26 Августа, 2017 - 02:00:56 - перейти к сообщению
Ch_chov пишет:
Тут очено подробно.


Все это здорово. Но глобальные переменные выводятся в контроллерах. Пример: application/controller/home.php - главная страница. Вот на ней все есть: и проверка авторизации и в сайдбаре информация.
Но как только перешли допустим в application/controller/contacts. php - Контакты. Все это пропало. Ни проверки авторизации (что бы вместо Авторизация было - Профиль) ни сайдбара.

Вопрос в том, что бы вывести это все 1 раз и навсегда везде - во всех контроллерах.
(Добавление)
webog пишет:
Вопрос в том, что бы вывести это все 1 раз и навсегда везде - во всех контроллерах.


P.S. Прописываю: мультиязычность, чекаю авторизацию, инфу в сайд бар(статистика с базы) и т.д. Во всех контроллерах это писать? А если имя изменится или добавить нужно будет? Во всех 100шт контроллерах дописывать и переписывать? Копипаст дикий )) Нужно 1 раз Улыбка
8. Ch_chov - 26 Августа, 2017 - 05:29:57 - перейти к сообщению
Цитата:
Во всех 100шт контроллерах дописывать и переписывать?

Общую логику нужно вынести в родительский класс или трейты, либо в отдельные сервисы.

Глобальные регионы и блоки можно добавить к ответу контроллера через механизм событий (как в Друпале).

Другой подход это создание собственных контроллеров для отдельных регионов (как в Симфони).
https://symfony[dot]com/doc/current/[dot][dot][dot]controllers[dot]html

 

Powered by ExBB FM 1.0 RC1