powiedzmy, że nadpisuję form theme, bo chcę dodać atrybut znacznikowi <select> dla pola typu Choice.

dlaczego zdefiniowana zmienna raz jest widoczna w późniejszych blokach:
  1. //app/Resources/views/_formTheme.html.twig
  2. {% use "bootstrap_3_layout.html.twig" %}
  3.  
  4. {% block choice_widget_collapsed -%}
  5. {% if help is defined %}
  6. {%- set attr = attr|merge({'aria-describedby':'helpBlock'}) -%}
  7. {% endif %}
  8. {{- parent() -}}
  9. {%- endblock choice_widget_collapsed %}


a innym razem musi być przekazana jako argument (linia nr 8):
  1. //app/Resources/views/_formTheme.html.twig
  2. {% use "bootstrap_3_layout.html.twig" %}
  3.  
  4. {% block form_row -%}
  5. {% if help is defined %}
  6. {%- set attr = attr|merge({'aria-describedby':'helpBlock'}) -%}
  7. {% endif %}
  8. {{- form_widget(form,{'attr': attr }) -}}
  9. {%- endblock form_row %}



edit:
Tak jak to rozumiem (poprawcie jeśli źle):
- funkcją parent nie wychodzę poza blok (tylko importuję linie kodu), dlatego zmienna ma tu zasięg a funkcją form_widget() wywołuję zupełnie nowy blok, a wywołując nowy blok muszę przekazać mu zmienną. Czyli zmienne mają zasięg tylko wewnątrz bloku gdzie zostały zdefiniowane.

nowe pytania. czym się różni funkcja:
  1. {{- form_label(form) -}}

od:
  1. {{- block('form_label') -}}