2017-02-16 1 views
2

symfony 양식을 렌더링하기 위해 나뭇 가지에 약간의 문제가 있으므로 먼저이 컨텍스트를 설명합니다.Symfony Twig 블록 생성 우선 순위

나뭇 가지에서, 블록 템플릿을 특정 순서로 정의됩니다

{# base.layout.html.twig #} 

{% block firstBlock %} 
{% endblock firstBlock %} 

{% block secondBlock %} 
{% endblock secondBlock %} 

을 그리고 우리는이 템플릿을 확장 할 때 우리가 쓸 수 있습니다 : 그래서 문제가 양식입니다

{# child.layout.html.twig #} 
{% embed "base.layout.html.twig" %} 

{% block secondBlock %} 
    {{ form_widget(form.submit_button) }} 
{% endblock secondBlock %} 

{% block firstBlock %} 
    {{ form_widget(form.some_field) }} 
    {{ form_rest(form) }} 
{% endblock firstBlock %} 

을()는 Symfony 양식을 렌더링하는 나뭇 가지에서 작동합니다.

모달 윈도우의 맨 끝에 제출 버튼을 생성하려고하는데, 문제는 이미 form_rest()가 렌더링되지 않은 모든 부분을 렌더링한다는 것입니다.

는 form_rest가 form.submit_button을 렌더링하기 위해 피하기 위해 약간의 수정이 있습니다, 그것은과 이미 렌더링 된 필드로 form.submit_button 설정입니다 :

{% do form.submit_button .setRendered %} 

하지만 렌더링되지 않습니다이 form.submit_button와

물론이 모든 것의 최종 목적은 form_rest 명령을 제거하지 않는 것입니다.

그래서 form_rest 명령 다음에 form.submit_button의 렌더링 된 값을 설정 해제하거나 무언가를 검색하여 템플릿의 블록 생성 순서를 선택하는 것이 더 좋습니다. 이처럼

:

{% block secondBlock with(1) %} 
    {{ form_widget(form.submit_button) }} 
{% endblock secondBlock %} 

{% block firstBlock with(2) %} 
    {{ form_widget(form.some_field) }} 
    {{ form_rest(form) }} 
{% endblock firstBlock %} 

는 당신의 도움을 주셔서 감사합니다!

+0

당신이 추가하면'{{form_rest (양식)}}'secondBlock''에? – sakhunzai

+0

@sakhunzai 만약 내가 이렇게하면 내 견해를 망칠 것입니다. 문제는 템플릿의 주어진 위치에 모든 양식 필드를 렌더링 한 다음 동일한 템플릿의 더 낮은 위치에 제출 버튼을 렌더링하는 것입니다. 그래서 몸체'블록'(이 예제에서는'firstBlock')과'footer' 블록 ('secondBlock') – Tanaky

+0

다음 알란 티 lo로가 제안한 내용을 확인하십시오 – sakhunzai

답변

0

제출 버튼 일 경우 양식 유형에서 삭제하고 html로 작성하면 문제가되지 않으며 작동 할 수 있습니다.

문제는

물론

, 당신의 HTML 버튼 내부 < 형태로해야합니다 ... 당신은 (버튼 포함) 최초의 나머지 부분을 렌더링하고, 버튼을 렌더링하려고 후에하지만 이미 렌더링되는 것입니다 > 태그. 당신이 양식 유형에서 버튼을 제출하여 유지하려면

,

한 솔루션은 렌더링 당신이했던 것처럼

이 솔루션은 (그것을 표시하는 것입니다 ... 일부 자바 스크립트를 사용하여 이동하는 것입니다), 제출 버튼의 정확한 html을 원하는 위치에 씁니다.

[편집] 첫 번째 블록에서 양식의 모든 필드를 렌더링하고 두 번째 블록에서 제출 버튼을 렌더링 한 다음 모든 필드를 렌더링 한 후에 form_rest를 배치 할 수도 있습니다 (모든 필드가 렌더링되었으므로 렌더링 할 항목이 있습니다.

+0

그래서 제네릭 솔루션이 없다고 가정합니다 ... 가장 좋은 방법은 'form_rest()'명령을 제거하고'form_end()'가'form_rest()'를 호출하도록하는 것입니다. 그러나 나는 form_end() 명령 이전에 렌더링되지 않은 가시적 인 입력이 없는지 확인해야합니다. – Tanaky

+0

예, 나머지는 div 및 스타일 표시로 숨길 수 있습니다. none; @Alain Tiemblo 답변도 확인하십시오. – Constantin

0

로직이없고 매핑이 전혀없는 제출 버튼 일 경우 가장 쉬운 방법은 제출 버튼을 HTML로 직접 렌더링하고 제거하는 것입니다 귀하의 양식.

<input type="submit" value="Submit"> {# ¯\_(ツ)_/¯ #} 

또 다른 해결책은 modal_layout.html.twig에 모달을 넣어, 다음 정확히 문제 이런 종류의 이루어집니다 embed 태그를 사용하는 것입니다.

modal_layout.html.twig

<div class="modal"> 
    <div class="form"> 
    {% block form_part %}{% endblock %} 
    </div> 
    <div class="submit pull-right"> 
    {% block submit_part %}{% endblock %} 
    </div> 
</div> 

your_page.html.twig는

{% embed 'modal_layout.html.twig' %} 
    {% block submit_part %} 
     {{ form_row(form.submit_button) }} 
    {% endblock %} 
    {% block form_part %} 
     {{ form(form) }} {# won't render submit again #} 
    {% endblock %} 
{% endembed %} 

그러나 IMO 제 2 용액, 그것은 청소기 나타나는 경우에도에 대한 가치가되지 않습니다 멍청한 제출 버튼.

건배

관련 문제