2013-07-08 1 views
1

양식 필드 오류 렌더링을위한 특정 새 블록을 정의하고 일반적인 오류 렌더링을 위해 form_errors를 변경하지 않고 유지하려고합니다. customFormTheme.html.twig에서오류 렌더링을위한 사용자 정의 나뭇 가지 양식 블록 정의

# Twig Configuration 
twig: 
    debug:   %kernel.debug% 
    strict_variables: %kernel.debug% 
    form: 
     resources: 
     - 'ApplicationMyBundle:Main:form/customFormTheme.html.twig' 

나는 form_div_layout.html.twig에서 복사 몇 블록을 덮어 플러스 나는 folloowing 새로운 하나를 추가했다.

{% block field_errors %}{% spaceless %} 
     {% if errors|length > 0 %} 
     <ul class="errors"> 
      {% for error in errors %} 
       {% if error.messageTemplate|length %} 
       <li class="error">{{ error.messageTemplate|trans(error.messageParameters, 'validators') }}</li> 
       {% endif %} 
      {% endfor %} 
     </ul> 
     {% endif %} 
{% endspaceless %}{% endblock %} 

는 그럼 난 이렇게 내보기에이 블록을 사용할 수 있기를 기대 :

<div> 
    {{ form_label(form.message, 'message.label'|trans({},'contact')|raw) }} 
    {{ form_widget(form.message, {attr: {maxlength:1000, size:1000, rows:8}}) }} 
    {{ field_errors(form.message) }} 
</div> 

그러나 나는 다음과 같은 오류가 나타납니다 나는 또한 재판을

The function "field_errors" does not exist. Did you mean "form_errors"

을 내 블록 이름 지정 text_errors 또는 textarea_errors 언급 됨 here 그러나 나는 더 운이 좋지 않았다.

아이디어가 있으십니까?

답변

2

실제로 블록 text_errors 또는 textarea_errors 만 정의하여 작동하며 템플릿에는 여전히 {{ form_errors(field.name) }}을 사용합니다. 필드 형식을 따서 명명 된 블록 (according to form field types)이 있으면 form_errors 대신 사용됩니다.

!! 하지만 나뭇 가지 템플릿에 직접 {{ text_errors(field.name) }}을 사용할 수 없습니다!

같은 방법이

{% block textarea_row %}{% spaceless %} 
    <div class="textarea l-field {{ (form_errors(form)?'error':'') }}"> 
     {{ form_label(form) }} 
     {{ form_widget(form) }} 
     {{ form_errors(form) }} 
    </div> 
{% endspaceless %}{% endblock textarea_row %} 

같은 특정 유형에 대한 사용자 지정 행을 가지고 다음과 같이 템플릿에서 사용할 수 있습니다 : 당신은 또한 수

{# message has textarea field type #} 

{{ form_row(form.message, { 
    label: 'message.label'|trans({},'contact')|raw , 
    attr: {maxlength:1000, size:1000, rows:8}}) 
}} 

객체를 사용하여 많은 맞춤 매개 변수 전달하기 {}

{% block form_row %} 
{% spaceless %} 
    <div class="form-field {{ (form_errors(form)?'error':'') }}"> 
     {{ form_label(form) }} 
     {{ form_widget(form) }} 
     {{ dump(attr) }} 
     {% if attr.help is defined and not attr.help == '' %}<p class="form-help">{{ attr.help }}</p>{% endif %} 
     {{ form_errors(form) }} 
    </div> 
{% endspaceless %} 
{% endblock form_row %} 

나는 여전히 내 사용자 지정 블록에서 테스트하기 위해 사용자 정의 매개 변수를했고```도움으로 같은 수 더 사용자 정의한를 가질 수있는 방법을 누락이

{{ form_row(form.message, { 
     label: 'message.label'|trans({},'contact')|raw , 
     attr: { 
      maxlength:1000, size:1000, rows:8, 
      help: 'password.help'|trans({})|raw 
     } 
    }) 
}} 
+0

처럼 사용 "를위한 사용자 정의 전설 필드 ""''. – svassr

+0

attr 객체를 사용하는 방법을 알아 냈습니다. 나는 내 대답을 편집했다. 건배 – svassr