2012-12-11 5 views
1

사용자 지정 양식 테마를 만들어 사용자 지정 필드 형식에 적절한 HTML을 생성하고 있습니다. twigfile을 등록했는데 이상한 기능을 찾을 수 없다는 오류를 제외하고는 정상적으로 작동합니다.양식 테마 : 기능을 찾을 수 없음

컬렉션 유형을 만드는 기본 테마 (form_div_layout)의 파트를 복사했습니다. 그런 다음 기본 스타일링을 방해하지 않도록 블록 이름을 변경했습니다. 블록 이름을 변경하기 전에는 로컬 정의를 사용하고 작동하지만 심지어 나뭇 가지는 함수로 블록을 사용할 수없는 것처럼 보입니다 (기본 테마에서 작동 함). 누군가 나에게 힌트를 줄 수 있을까요?

기본 템플릿에서 복사 한 것입니다. 이제

{% block sortableCollection_widget %} 
{% spaceless %} 
    {% if prototype is defined %} 
     {% set attr = attr|merge({'data-prototype': form_row(prototype) }) %} 
    {% endif %} 
    <div {{ block('widget_container_attributes') }}> 
     {% if form.parent is empty %} 
      {{ form_errors(form) }} 
     {% endif %} 
     {{ block('sortableCollection_rows') }} 
     {{ form_rest(form) }} 
    </div> 
{% endspaceless %} 
{% endblock %} 

{% block sortableCollection_rows %} 
{% spaceless %} 
    <ol class='.collection-editor .collection-sortable'> 
    {% for child in form %} 
     {{ form_row(child) }} 
    {% endfor %} 
    </ol> 
{% endspaceless %} 
{% endblock sortableCollection_rows %} 

{% block form_row %} 
{% spaceless %} 
    <li>using my template 
     {{ form_label(form) }} 
     {{ form_errors(form) }} 
     {{ form_widget(form) }} 
    </li> 
{% endspaceless %} 
{% endblock form_row %} 

{% block form_rows %} 
{% spaceless %} 
    {% for child in form %} 
     {{ form_row(child) }} 
    {% endfor %} 
{% endspaceless %} 
{% endblock form_rows %} 

나는 sortableCollection_row에 form_row 이름을 변경하고이 오류를 얻을 : 기능 "sortableCollection_row는"DTAMetadataBundle에 존재하지 않는 상태 : 라인 39

에서 sortableCollection.html.twig을 그리고 그것은 가리키는 sortableCollection_row (child)가 불려가는 장소

{% block sortableCollection_widget %} 
{% spaceless %} 
    {% if prototype is defined %} 
     {% set attr = attr|merge({'data-prototype': form_row(prototype) }) %} 
    {% endif %} 
    <div {{ block('widget_container_attributes') }}> 
     {% if form.parent is empty %} 
      {{ form_errors(form) }} 
     {% endif %} 
     {{ block('sortableCollection_rows') }} 
     {{ form_rest(form) }} 
    </div> 
{% endspaceless %} 
{% endblock %} 

{% block sortableCollection_rows %} 
{% spaceless %} 
    <ol class='.collection-editor .collection-sortable'> 
    {% for child in form %} 
     {{ form_row(child) }} 
    {% endfor %} 
    </ol> 
{% endspaceless %} 
{% endblock sortableCollection_rows %} 

{% block sortableCollection_row %} 
{% spaceless %} 
    <li>using my template 
     {{ form_label(form) }} 
     {{ form_errors(form) }} 
     {{ form_widget(form) }} 
    </li> 
{% endspaceless %} 
{% endblock sortableCollection_row %} 

{% block form_rows %} 
{% spaceless %} 
    {% for child in form %} 
     {{ sortableCollection_row(child) }} // ERROR. 
    {% endfor %} 
{% endspaceless %} 
{% endblock form_rows %} 

아이디어가 있습니까? 감사!

답변

2

form_row은 나뭇 가지 기능이며 나뭇 가지 블록입니다. 따라서 form_row(...)을 호출 할 때 실제로 나뭇 가지 함수를 호출하고 실제로 블록을 직접 호출하지 않습니다. 함수는 블록 내용을 포함하므로 혼란 스러울 수 있습니다.

sortableCollection_row은 실제로 함수가 아니기 때문에 올바르지 않습니다. 블록을 호출하려고합니다. 알 겠어? 당신은 잠재적으로 같은 것을 할 수 있습니다 : 이제

{% block form_rows %} 
{% spaceless %} 
    {% for child in form %} 
     {{ block('sortableCollection_row') }} // NO ERROR 
    {% endfor %} 
{% endspaceless %} 
{% endblock form_rows %} 

을 대신 form를 참조 당신의 sortableCollection_row 블록 내부에이 블록에 아이 변수를 전달 더 이상 것 때문에 당신이 child을 참조 할 거 야.

+0

오 마이 갓. 당연하지. 나는 Symfony와 Twig에 익숙하지 않고 분명히 (필자의 의견으로는) 매우 혼란 스럽다. –

관련 문제