El uso de vars para nombres de bloques no funciona.
{% set block_name = "my_block_name"%}
{% block block_name%}
algo de html ...
{% endblock%}
porque block_name
representado como cadena 'block_name'
Lo siento, ¿estás diciendo que no puedes tener bloques dinámicos con twig o que lo estoy usando de manera incorrecta?
Tienes razón, no hay nombres de bloques dinámicos
No puede utilizar bloques dinámicos. Publique su caso de uso en la lista de correo de usuarios de Twig.
Perdón por abrir un estuche frío ^^. Creo que me he encontrado con un caso de uso que se beneficiaría de los nombres de bloques dinámicos ...
Utilizo Doctrine con herencia de tabla única (clase abstracta base = Artículo, y Noticias + Preguntas frecuentes amplían el artículo).
Luego, he creado clases de formularios para poder crear News y Faq. Pero todas las formas usan la misma plantilla de ramitas. Luego necesitaba personalizar una plantilla de campo (digamos artículo.producto) como se describe aquí .
El problema es que el nombre del campo cambia según el formulario que se utilice. El nombre será news_product o faq_product, por lo que sería útil poder personalizar los campos de mi formulario de esta manera para evitar repeticiones:
{%- block '_'~type~'_product_widget' -%}
...
{% endblock %}
Después de investigar un poco, resolví esto forzando el prefijo del formulario en las diferentes clases de tipo de formulario usando getBlockPrefix, de modo que todos los formularios tendrán los mismos nombres de campo, y simplemente puedo personalizar article_product:
public function getBlockPrefix(){
return 'article';
}
Así que solo quería documentar este caso de uso que puede ayudar a alguien ...
Los nombres de los bloques forman parte de la estructura de la plantilla, por lo que deben conocerse en el momento de la compilación.
Las variables solo se conocen en tiempo de ejecución.
Comentario más útil
Los nombres de los bloques forman parte de la estructura de la plantilla, por lo que deben conocerse en el momento de la compilación.
Las variables solo se conocen en tiempo de ejecución.