1

Тема: "Добавить" данных в шаблон

Подскажите пожалуйста направление - куда мыслить:)?

Задача такова: есть некий экшен в контроллере(он "обрабатывает" главную страницу личного кабинета), в котором, в зависимости от роли юзера рендерятся разные шаблоны.
Понадобилось создать и обработать событие входа в личный кабинет. Все ок, но как теперь в обработчике этого события "добавить" некие данные в шаблон, который в итоге будет срендерен?

2 Отредактировано dmitryk (2016-03-10 11:12:48)

Re: "Добавить" данных в шаблон

Я когда то давно писал на Yii фреймворке, там вот было событие типа pre_render. По мотивам был написан пост как сделать примерно тоже самое в симфони.

https://korotovsky.io/2014/04/12/symfon … der-event/ реализация в статье имеет свои недостатки, там в каментах есть решение. Писал еще когда изучал симфони и сталкивался с такой же проблемой

Но вообще я бы наверное уже (теперь) сделал бы по-другому, через наследование шаблонов и твиг-хэлперы

3

Re: "Добавить" данных в шаблон

Спасибо. Да интересно.
И, кстати, я кажется натыкался на Ваш пост, когда экспериментировал с формулировкой запроса по данной задаче.

Этот вариант мне не совсем подходит. Дело в том, что у меня есть еще одно условие, о котором я не упомянул: все это надо сделать в уже существующем большом и сложном проекте (написанным не мной) с минимальным внедрением в существующий код. Мне нужно передать в шаблон совсем немного данных, и пока я остановился на  session.flashBag. Хоть это и неправильно, но зато - минимальные внедрения.

Не совсем понимаю, что Вы имели ввиду под:

через наследование шаблонов и твиг-хэлперы

?
У меня этот экшен конроллера рендерит в зависимости от ролей юзера разные шаблоны(их около десяти). Они наследуются от базового. А мне надо добавить данных в шаблон вне зависимости от роли юзера. То есть, если я правильно понимаю Вашу идею, то мне этот вариант не подходит, потому как, от базового шаблона я унаследоваться не могу, а наследоваться от каждого, соответствующего роли юзера - это, по моему, не правильно.

4

Re: "Добавить" данных в шаблон

Смотрите еще как можно сделать. Берете в вашем подписчике на логин, инжектите @request_stack. Получаете оттуда master request. В реквесте есть атрибуты. Вот туда и запихайте ваши данные, таким образом "протащив" их до вью слоя, не записывая их в сессию. Далее создаете твиговый хэлпер, в который тоже инжектите @request_stack и там мапите какой нить метод на функцию. При вызове функции из твига, берите master request и читайте атрибут, тот, в который вы в подписчике вашем напихали данных в начале.

Т.о. выполняются все best practice правила: сервисы stateless, сессия не засоряется всяким мусором, не нужно внедряться глубоко в подсистему темплейтинга и т.д.

5

Re: "Добавить" данных в шаблон

dmitryk пишет:

Берете в вашем подписчике на логин, инжектите @request_stack. Получаете оттуда master request.

Кагбэ, это сработает только если после логина нет редиректа, а обычно он таки есть. default/smile
Т.е. если я правильно понял задачу, то данные в шаблон нужны не в том же самом запросе, в котором осуществляется авторизация пользователя и срабатывают события, а в следующем за ним.

6

Re: "Добавить" данных в шаблон

Нет, это как раз то, что нужно!
Это у меня не логин экшен, а именно экшен кабинета. Там нет никаких редиректов.
Данные в шаблон(ы) нужны именно в том же запросе. Изначально, этот экшен представлял собой цепочку elseif в которых в зависимости от роли юзера рендерились разные шаблоны. Опять-таки в зависимости от некоторых ролей юзера иногда подтягивались данные из некоторых моделей. Мне же надо было во всех этих случаях добавить в во все шаблоны, вне зависимости от роли, некие данные, полученные от стороннего сервиса.

Спасибо большое!
Буду курить про

Далее создаете твиговый хэлпер, в который тоже инжектите @request_stack и там мапите какой нить метод на функцию.

остальное мне понятно.