2013-08-06 5 views
1

나는 이벤트 리스너/가입자에서 알려진 나뭇 가지 블록을 확장하는 방법을 찾고 있습니다.Symfony2 이벤트 리스너에서 나뭇 가지 확장하기

코드는 매우 기본입니다.

홈페이지 나뭇 가지 : 몸과 자바 스크립트 : 당신이 2 개 블록 단지 일반 HTML입니다 볼 수 있듯이

<!doctype html> 
<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8"> 
<title>Hello World</title> 
</head> 
<body> 

{% block body %}{% endblock %} 

{% block javascripts %}{% endblock %} 

</body> 
</html> 

.

예를 들어, 나는 KernelResponse에 이벤트 리스너를 가지고 있습니다. 내가 원하는 것은 나뭇 가지의 "extends"을 가진 "javascripts"블록에 새로운 자바 스크립트를 추가 할 수 있다는 것입니다.

코드가 될 수있는 일 같은 :

public function onKernelResponse(FilterResponseEvent $event) 
{ 
    if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) { 
     return; 
    } 

    $response = $event->getResponse(); 

    //complete guesswork code to illustrate what I'm trying to achieve 

    $content = $this->twig->extend(//extend() function is imaginary 
     $response, //pass in current response 
     'AcmeBundle:Javascript:index.html.twig', 
    ); 
    $response->setContent($content); 
} 

$ this-> twig-> $처럼 작동합니다 확장 this-> twig->(), 대신 확장, 새로운 무언가를 렌더링의해야 렌더링 $ 응답을 가져 와서 'AcmeBundle : Javascript : index.html.twig'로 확장하면 "javascripts"블록에 더 많은 콘텐츠를 추가 할 수 있습니다. 여기

은의 예입니다 "AcmeBundle : 자바 스크립트 : index.html.twig"
{% block javascripts %} 
    {{ parent() }} 

    <script> 
     var something = "new"; 
    </script> 
{% endblock %} 

은 기본적으로 내가 프로그래밍 방식으로 이벤트 리스너에 나뭇 가지 블록을 확장 할 수있는 방법을 찾고 있어요.

미리 도움을 주셔서 감사합니다.

답변

0

이벤트 리스너에 twig 글로벌 변수를 등록하여 해당 블록을 확장 할 수 있음을 나타낼 수 있습니다.

... 또는 이벤트 수신기에 등록 된 전역 변수를 나뭇 가지의 template_from_string() 함수를 사용하여 eval과 다소 유사한 템플릿 코드로 포함 할 수 있습니다.

{% block javascripts %} 
    {{ parent() }} 
    {{ include(template_from_string(global_variable_name|default(''))) }} 
{% endblock %} 
+0

빠른 답장 nifr. 블록에 여러 코드를 추가 할 여러 이벤트 리스너가있는 경우 어떻게해야합니까? – Vincent

+0

배열 변수를 등록하지 않은 경우 등록하고 각 리스너에서 요소를 추가 한 다음 포함 시키십시오. – nifr

+0

다음과 같이 전역 변수에 요소를 추가하는 방법을 알아 내려고합니다 : $ twig-> addGlobal ('js_footer_extra', ''); 물론 이것은 전역 변수를 덮어 쓰기 만하고, 요소를 추가하는 것은 허용하지 않습니다. twig 글로벌 배열에 추가하는 가장 좋은 방법은 무엇입니까? 다시 한번 감사드립니다. – Vincent

관련 문제