2012-01-16 6 views
4

В настоящее время я пишу несколько расширений в ветке, но у меня возникают проблемы с решением вопроса о том, почему некоторое расширение должно быть реализовано как тег или функция.Теги vs functions in twig extensions

Twig-х documentation перечисляет следующие 2 конструкции и что они делают:

  • {{ }}: используется для печати результата оценки экспрессии;
  • {% %}: используется для выполнения операторов.

Я планирую реализовать что-то похожее на symfony2's embedded controllers.

Почему это, что функция реализована как:

{% render "AcmeDemoBundle:Demo:fancy" with { 'name': name, 'color': 'green' } %} 

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

render("AcmeDemoBundle:Demo:fancy", { 'name': name, 'color': 'green' }); 

ответ

2

Я был заинтересован в том же вопросе. Тебе решать.

Если вы используете {{ }}, вы сможете применить фильтры к выходу: {{ render()|upper }}. Если вы используете {% %}, выход вашего расширения не будет «дезинфицирован» (но вы всегда можете использовать {{ }} с array('is_safe' => array('all')).

render является важной конструкцией. Это не просто функция вроде {{ path() }}, которую вы можете вызвать в выражении: {{ host ~ path() }}.