템플릿 엔진 "Twig"의 변수 범위 이야기

프로그래밍 언어의 변수는 선언하는 위치에 따라 범위가 다르며 변수의 범위라고합니다.

그리고 Twig에도 변수의 범위가 있습니다.



검증 환경


  • Macbook Pro (Retina, 15-inch, Mid 2014)
  • Mac OS X 10.11.6 El Capitan
  • PHPStorm 2017.3
  • Vagrant 1.9.4
  • CentOS 7.4.1708
  • Drupal8.4.4

  • 글로벌 스코프



    일반적으로 Twig 템플릿에서 변수에 값을 설정하면 전역 변수입니다.

    예) set 태그를 사용하여 변수에 값 설정
    {% set foo = "bar" %}
    

    템플릿의 시작 부분에서 선언된 변수는 이후 템플릿에서 어디서나 액세스할 수 있습니다.

    예) 글로벌 스코프로 선언된 변수는 임의의 장소에서 액세스 가능
    {% set foo = "value" %}
    
    {% if foo == "value" %}
      {{ foo }}
    {% endfor %}
    
    {% for item in list %}
      {{ foo }}
    {% endfor %}
    
    {% trans %}value is {{ foo }}{% endtrans %}
    

    로컬 범위



    for 태그에 관해서는 로컬 스코프가 되어 있습니다.

    물론 for 루프 내에서 전역 변수에 액세스할 수 있습니다. 그러나 for 루프에서 새로 선언된 변수는 로컬 변수가 되므로 외부에서 액세스할 수 없습니다.

    예) 로컬 스코프에서 선언된 변수를 글로벌 스코프로 출력해 봅니다.
    {% for item in list %}
      {% set bar = "value" %}
    {% endfor %}
    
    {{ bar }}
    

    위의 코드를 실행하면 알 수 있지만 화면에 아무 것도 출력되지 않습니다.
    (Twig는 정의되지 않은 변수를 출력해도 오류가 발생하지 않기 때문에)

    Twig 공식 문서의 set 태그 해설 하지만 for 루프 안에는 로컬 스코프가 적용되고 있다는 것을 설명하고 있습니다. 그리고 실제로 검증해 보았는데, block 태그도 로컬 스코프가 되어 있는 것 같습니다.

    그래서 forblock 의 2개의 태그일 때는 변수의 스코프를 신경 쓰도록 합시다.

    로컬 범위에서 전역 변수에 값을 설정하면 동작



    for/block 태그에서 전역 변수에 값을 설정하면 전역 변수가 삭제되고 로컬 변수가 됩니다.

    예) 로컬 범위에서 전역 변수에 값을 다시 설정해 봅니다.
    {% set foo = "value01" %}
    
    {% block block_A %}
      {% set foo = "value02" %}
    {% endblock %}
    
    {{ foo }}
    

    위의 코드를 실행하면 value02가 출력되어야 합니다.

    전역 변수의 값을 다시 작성할 계획이 범위 내에서 전역 변수와 충돌하는 변수 이름에 값을 설정하면 이전 변수가 삭제되기 때문입니다.

    for/block 태그에서 전역 변수의 값을 조작하고 싶다면 새로 변수를 정의한 다음 그곳에서 할 수 있습니다.

    참고 페이지


  • h tps : // 및 ぃg. sym fu ny. 이 m/도 c/2. x/gs/세 t. HTML
  • htps // c 등 ftcms. s c x x 짱. 코 m / 쿠에 s chion s / 153 / is-te-re-a-wa y--de-fu-ne-a-g-ba-l-o-r-u-te-on-a-g-bbck
  • 좋은 웹페이지 즐겨찾기