Etiquetas vs funciones en extensiones de ramas
Pregunta
Actualmente estoy escribiendo algunas extensiones en Twig, pero tengo problemas para decidir por qué una cierta extensión debe implementarse como una etiqueta o una función.
Leña menuda documentación Enumera las siguientes 2 construcciones y lo que hacen:
{{ }}
: utilizado para imprimir el resultado de una evaluación de expresión;{% %}
: Se utiliza para ejecutar declaraciones.
Estoy planeando implementar algo similar a Symfony2 controladores integrados.
¿Por qué es que la función se implementa como:
{% render "AcmeDemoBundle:Demo:fancy" with { 'name': name, 'color': 'green' } %}
Dado que la función de controladores integrados debe devolver una plantilla completamente renderizada para el controlador solicitado, ¿no sería una función más apropiada?
render("AcmeDemoBundle:Demo:fancy", { 'name': name, 'color': 'green' });
Solución
Estaba interesado en la misma pregunta. Depende de ti decidir.
Si utiliza {{ }}
Podrá aplicar filtros a la salida: {{ render()|upper }}
. Si utiliza {% %}
La salida de su extensión no se "desinfectará" (pero siempre puede usar {{ }}
con array('is_safe' => array('all')
).
render
es una construcción importante. No es solo una función como {{ path() }}
que puedes llamar a una expresión: {{ host ~ path() }}
.