2013-01-08 2 views
0

symfony2 기반 웹 사이트를 계획 중입니다. 기본 레이아웃은 다음 블록으로 구성됩니다많은 컨트롤러로 구성된 심플한 Symfony2 웹 사이트를 구축하는 방법은 무엇입니까?

  • 차 머리글 메뉴
  • 차 사이드 메뉴
  • 바닥 글에 사이트 맵
  • 로그인 양식
  • 검색
  • 설문 조사 질문
  • 장바구니

모든 부분에서 나는 컨트롤러와 Twig 템플릿을 작성하여 Symfony2에서 자신의 길을 코딩하는 법을 알고 있습니다. 일부 부품의 경우 자체 컨트롤러를 제공하는 FOSUserBundle과 같은 번들을 사용할 계획입니다.

나는이에 대한 좋은 답변을 찾을 수없는 것은 : 가 어떻게 함께이 모든 춤을 할 수 있습니까? 내 차 헤더 메뉴 번들 또는 FOSUserBundle는 경로가 트리거되는 경우 한 단계 및 응답을 반환합니다. 그러나 그것은 쓸모가 없다. 나는이 빌딩 블록이 어디에서 방아쇠를 당겼는지에 관계없이 (거의) 그 부분을 처리하고 렌더링하는 것을 필요로합니다.

이 형태의의는 특히 흥미있어. 양식이 제출되면 적절한 조치로 처리해야합니다. 그러나 이후에는 전체 페이지가 반환되기 전에 다른 모든 블록이 내용을 렌더링해야합니다.

당신이 Drupal를 알고있는 경우 : 내가 블록의 형태를 구현할 수 있습니다. 나는이 블록만을 다루고 있으며 페이지의 다른 모든 것들에 대해서 신경 쓸 필요가 없다.

알고 계신가요? Java/SWING을 알고 계신 경우 : 자기 포함 된 것으로 조치 또는 대화 상자를 구현할 수 있습니다. 프레임 워크는 다른 모든 것을 최신으로 유지하는 데주의를 기울입니다.

답변

1

정확하게 이해한다면 사이트의 다른 영역에서 페이지에 다른 블록을 표시하고 싶습니까? 그런 경우에는

, 당신이 당신의 layout.html.twig (또는 base.html.twig, 또는 무엇이든 당신이 그것을 호출 할 수 있습니다)

예 layout.html에서 페이지에 포함 할 블록을 설정합니다. 나뭇 가지 :

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title>Acme Example Page</title> 
    </head> 
    <body> 
     <div id="sidebar"> 
      <div id="sidebar-menu-block" class="block"> 
       {% include 'AcmeBundle:Sidemenu:sideMenu.html.twig' %} 
      </div> 
      <div id="sidebar-cart-block" class="block"> 
       {% render url('acme_shopping_cart_block_url') %} 
      </div> 
      <div id="sidebar-poll-block" class="block"> 
       {% render url('acme_poll_block_url') %} 
      </div> 
     </div> 

     <div id="content"> 
      {% block body %}{% endblock %} 
     </div> 
    </body> 
</html> 

플랫 나뭇 가지 템플릿을 포함하려면 '포함'을 사용하십시오. 로드하기 전에 처리가 필요한 블록이 필요한 경우 '렌더링'을 사용하십시오.

예 페이지 (IE : AcmeUserBundle : 등록 : register.html.twig) : 위의 예는 layout.html.twig에 정의 된 사용자의 모든 블록으로 register.html.twig을 둘러싸고

{% extends 'layout.html.twig' %} 

{% block body %} 
<h1>My Page with a form!</h1> 
<form> 
    {{ form_widget(form) }} 
    <input type="submit" value="Save" /> 
</form> 
{% endblock body %} 

. symfony 문서의 "다른 템플릿 포함"섹션을 확인하십시오 : http://symfony.com/doc/2.0/book/templating.html#including-other-templates

+0

"올바르게 이해하고 있다면 사이트의 다른 영역에서 페이지에 다른 블록을 표시하고 싶습니까?" 네, 맞습니다. – BetaRide

+0

답변 해 주셔서 감사합니다. 나는 표준 URL 태그가 아니기 때문에 "render url"이 무엇을하는지 파악하기 위해 어느 정도 시간을 검색해야했습니다. 결국 심포니 2 책은'{% block body | default ('') %}'대신'{% block body | default ('') %}'의 답을 가지고 있습니다 : http://symfony.com/doc/current/book/templating.html#embedding-controllers – BetaRide

+0

' 블록 바디 %} {% endblock body %}'는 레이아웃 템플릿에 대한 나의 선택입니다 :-) – nifr

0

다른 복잡한 렌더링을 호출하는 복잡한 블록을 포함 시키려면 Twig 포함이 충분하지 않습니다. Dependency Injector, Services 등을 확인해야한다고 생각합니다. 예를 들어 데이터베이스에서 마지막 "설문 조사 질문"을 가져 와서 멋지게 표시하는 나뭇 가지 서비스를 만들 수 있습니다.일부 코드에 관심이 있으시면 언제든지 말씀해주십시오.

관련 문제