2012-02-13 2 views
8

포함을 사용하여 변경 한 후에 수정을 유지하기 위해 어떻게 나뭇 가지 전역 변수를 얻을 수 있습니까? 내가 원하는 "내 설정"을 얻을 수 있지만 원하는 출력은 "@ 깊은 설정"입니다.Symfony 2 + Twig 전역 변수

응용 프로그램/설정/config.yml

twig: 
    globals: 
     testvar: "original setting" 

root.html.twig

{% include "MyBundle::levelone.html.twig" %} 
{{ testvar }} 

levelone.html.twig

{% set testvar = "set @ levelone" %} 
{% include "MyBundle::deeper.html.twig" %} 

deeper.html.twig
{% set testvar = "set @ deeper" %} 
+0

당신은 블록 내에서 시도? 제 말은'{% set testvar %}'와'{{testvar}}'를'{% block global_test %} '로 감싸는 것입니다. – Florian

답변

6

흥미로운 질문과 나는 답을 알지 못하지만 블록과 물건으로 어리석은 양은 효과가 없을 것입니다. 생성 된 PHP 캐시 템플릿 파일을 보았다. 변수를 에코하면 다음과 같이 나타납니다 :

그래서 기본적으로 로컬 컨텍스트에서 testvar를 찾습니다. 발견되지 않으면 글로벌 컨텍스트를 찾습니다. 당신이 테스트 VAR의 값을 설정하면

당신이 얻을 :

// {% set testvar = 'level one' }} 
$context["testvar"] = "level one"; 

그래서 로컬 컨텍스트가 업데이트됩니다. 포함 된 템플릿이 반환되면 변경된 값이 사라집니다.

그래서 기본적으로 전역 변수는 실제로 읽기 전용입니다.

확장 프로그램을 통해이 작업을 수행 할 수 있습니다. 내부에 대해 충분히 알지 못합니다.

1

Twig를 통해 전역 변수를 정의하려고 시도 했습니까? 다음과 같이 당신은 당신의 config.yml 파일에 작업을 수행 할 수 있습니다

twig: 
    globals: 
     my_global_var : myvalue 

그래서 템플릿에서 {{my_global_var}}official docs을 읽고 더 많은 정보 myvalue

를 인쇄합니다. 컨테이너 인식 객체에서

+0

어떻게 그 두 줄을 넣어야합니까? "$ twig = new Twig_Environment ($ loader); $ twig-> addGlobal ('text', new Text());" 내 symfony2.1 프로젝트에서? – linuxatico

+0

아직 베타 버전이므로 Symfony2.1을 사용하고 있지 않습니다. 그러나 Symfony2.016을 사용하면 config.yml 파일에 전역 변수를 정의 할 수 있습니다. [here] (http://symfony.com/doc/current/cookbook/templating/global_variables.html). – JeanValjean

+1

실제로이 방법으로 변수는 읽기 전용입니다. 즉, 템플릿에서 값을 변경할 수 있지만 다른 템플릿에서 변수에 액세스하면 해당 값이 이제 config에 설정된 기본값이됩니다. .yml – linuxatico

8

는 :

$this->get('twig')->addGlobal('ThomasDecauxIsAwsome', 4); 
0

그것은 서비스를 통해 나뭇 가지 확장을 정의함으로써 가능 확인은 here