Передать параметр всем видам - PullRequest
3 голосов
/ 25 марта 2012

Я хочу отобразить имя пользователя / дату / время последнего подключения и некоторую другую информацию во всех моих представлениях Twig (все они берут свое начало от общего макета Twig).

Как мне этого добиться без необходимостиявно передать эти параметры из каждого контроллера в каждое представление?

Нужно ли создавать расширение Twig или вызывать контроллер / действие, которое будет извлекать имя пользователя / соединение / другую информацию из макета, используя оказывать ?

Я бы хотел более простое решение, если это возможно.

Ответы [ 4 ]

10 голосов
/ 25 марта 2012

Самое простое решение - встроить контроллеры из ваших шаблонов / макета.Но имейте в виду, что подзапросы являются дорогостоящими и могут существенно повлиять на производительность.Если в какой-то момент вы заметите, что версия вашего приложения медленная до чертиков, то знайте, что причина, вероятно, в нескольких подзапросах для каждого запроса.

Следующее решение - Расширения Twig .В большинстве случаев вам понадобятся функции .Вы можете назвать это следующим образом:

{{ user_info(user) }}

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

3 голосов
/ 25 марта 2012

Пользователь доступен как предопределенная глобальная переменная, взгляните на this , а если вы хотите повторно использовать один и тот же фрагмент шаблона во всех ваших шаблонах, взгляните на include тег.

2 голосов
/ 28 ноября 2016

Я не знаю, был ли он доступен, когда этот вопрос был опубликован в 2012 году, но я бы использовал Twig Globals.

С http://twig.sensiolabs.org/doc/advanced.html#globals:

Глобал

Глобальная переменная похожа на любую другую переменную шаблона, за исключением того, что он доступен во всех шаблонах и макросах:

$twig = new Twig_Environment($loader);
$twig->addGlobal('text', new Text());

Затем вы можете использовать текстовую переменную в любом месте шаблона:

{{ text.lipsum(40) }}

Я поместил код в какое-то место, где он будет вызываться каждый раз, например, конструктор контроллера или что-то в этом роде.

0 голосов
/ 25 марта 2012

Был этот вариант использования только в прошлом месяце.Обратился к команде render, и она действительно отлично работала, так как вызываемое действие контроллера не обязательно должно определять @Route ... даже не @Template, но это зависит от вас;)

...