Twig: Nomes de blocos dinâmicos

Criado em 12 abr. 2011  ·  7Comentários  ·  Fonte: twigphp/Twig

Usar vars para nomes de bloco não funciona.

{% set block_name = "my_block_name"%}

{% block block_name%}
algum html ...
{% endblock%}

Comentários muito úteis

Os nomes dos blocos fazem parte da estrutura do modelo e, portanto, devem ser conhecidos no momento da compilação.
As variáveis ​​são conhecidas apenas em tempo de execução.

Todos 7 comentários

porque block_name representado como string 'block_name'

Desculpe, você está dizendo que não pode ter blocos dinâmicos com galho ou que estou usando da maneira errada?

Você está certo, sem nomes de bloco dinâmico

Você não pode usar blocos dinâmicos. Publique seu caso de uso na lista de discussão do usuário Twig.

Desculpe por abrir uma caixa fria ^^. Acho que posso ter encontrado um caso de uso que se beneficiaria dos nomes de blocos dinâmicos ...

Eu uso o Doctrine com herança de tabela única (classe abstrata base = Artigo, e Notícias + Faq estende Artigo).

Então, criei classes de formulário para poder criar Notícias e Faq. Mas todos os formulários usam o mesmo modelo de galho. Em seguida, precisei personalizar um modelo de campo (digamos, artigo.produto) conforme descrito aqui .

O problema é que o nome do campo muda dependendo de qual formulário é usado. O nome será news_product ou faq_product, portanto, seria útil poder personalizar os campos do meu formulário assim para evitar repetições:

{%- block '_'~type~'_product_widget' -%} ... {% endblock %}

Depois de alguma pesquisa, resolvi isso forçando o prefixo do formulário nas diferentes classes de tipo de formulário usando getBlockPrefix, para que todos os formulários tenham os mesmos nomes de campo e eu possa simplesmente personalizar o article_product:

public function getBlockPrefix(){ return 'article'; }

Então, só queria documentar esse caso de uso que pode ajudar alguém ...

Os nomes dos blocos fazem parte da estrutura do modelo e, portanto, devem ser conhecidos no momento da compilação.
As variáveis ​​são conhecidas apenas em tempo de execução.

Esta página foi útil?
0 / 5 - 0 avaliações