0

에 연결된 render an error message을 시도 할 때 문제가 발생했습니다. 내가 form_row를 사용하는 경우이 문제는form_widget이 invalid_message 오류를 표시하지 않습니다.

 {{ form_start(form, {'attr': {'class': 'form-horizontal', 'role': 'form', 'novalidate': 'novalidate'}}) }} 
     <div class="form-group {% if form.password.vars.errors|length > 0 %}has-error{% endif %} {% if form.password.vars.required == 'true' %}required{% endif %}"> 
      {{ form_label(form.password.first, "Password") }} 
      <div class="col-sm-8"> 
      {{ form_row(form.password.first) }} 
      <span class="help-block">{{ form_errors(form.password) }}</span> 
      </div>    
     </div> 

     <div class="form-group {% if form.password.vars.errors|length > 0 %}has-error{% endif %} {% if form.password.vars.required == 'true' %}required{% endif %}"> 
      {{ form_label(form.password.second, "Confirm password") }} 
      <div class="col-sm-8"> 
      {{ form_row(form.password.second) }} 

      </div> 
     </div> 
     ........ 

오류는 암호 텍스트 상자 위에 (에 표시됩니다, 그러나, 다음과 같이 내가 나뭇 가지를 구현하는 경우 invalid_message가 렌더링되지 않습니다

 {{ form_start(form, {'attr': {'class': 'form-horizontal', 'role': 'form', 'novalidate': 'novalidate'}}) }} 
     <div class="form-group {% if form.password.vars.errors|length > 0 %}has-error{% endif %} {% if form.password.vars.required == 'true' %}required{% endif %}"> 
      {{ form_label(form.password.first, "Password") }} 
      <div class="col-sm-8"> 
      {{ form_widget(form.password.first) }} 
      <span class="help-block">{{ form_errors(form.password) }}</span> 
      </div>    
     </div> 

     <div class="form-group {% if form.password.vars.errors|length > 0 %}has-error{% endif %} {% if form.password.vars.required == 'true' %}required{% endif %}"> 
      {{ form_label(form.password.second, "Confirm password") }} 
      <div class="col-sm-8"> 
      {{ form_row(form.password.second) }} 

      </div> 
     </div> 
     ........ 

입니다 실제로 span이 텍스트 상자 아래에 있으므로 오류를 배치 한 영역이 아니며 텍스트 상자를 강조 표시하지 않습니다. 나는이 문제를 해결하기 위해 최선을 다했지만 행운이 없다. 전문가가이 문제를 해결하기위한 전문가의 지침을 제공 할 수 있다면 정말 감사 할 것입니다. :)

참고

:이 솔루션은 간단하고이를 게시하고있는 폼 컨트롤러

$builder->add('password', 'repeated', array('type' => 'password', 
             'required' => true, 
             'invalid_message' => ErrorMessages::PASSWORDS_DONOT_MATCH, 
             'options' => array('attr' => array('class' => 'password-field form-control')),                     
             'first_options' => array('label' => false,                  
                   'label_attr'=>array('class'=>'col-sm-3 control-label')), 
             'second_options' => array('label' => false,                  
                   'label_attr'=>array('class'=>'col-sm-3 control-label')))); 

답변

2

에 반복 된 암호는 경우에 사람이 앞으로이 문제에 실행됩니다. 해결책은 forms_row (예 : {{ form_row(form.password.first) }}) 필드를 렌더링하고 오류를 표시 할 필드에 'error_bubbling' => true을 포함시키는 것입니다. 이를 포함하여 필자의 경우 필드 하이라이트 및 오류 메시지 배치 문제가 해결되어 first password text box 아래에 오류가 표시되었습니다.

동작 예,

  • twig

    {{ form_start(form, {'attr': {'class': 'form-horizontal', 'role': 'form', 'novalidate': 'novalidate'}}) }} 
        <div class="form-group {% if form.password.vars.errors|length > 0 %}has-error{% endif %} {% if form.password.vars.required == 'true' %}required{% endif %}"> 
         {{ form_label(form.password.first, "Password") }} 
         <div class="col-sm-8"> 
         {{ form_row(form.password.first) }} 
         <span class="help-block">{{ form_errors(form.password) }}</span> 
         </div>    
        </div> 
    
        <div class="form-group {% if form.password.vars.errors|length > 0 %}has-error{% endif %} {% if form.password.vars.required == 'true' %}required{% endif %}"> 
         {{ form_label(form.password.second, "Confirm password") }} 
         <div class="col-sm-8"> 
         {{ form_row(form.password.second) }} 
    
         </div> 
        </div> 
        ........ 
    
  • form 제어기

    $builder->add('password', 'repeated', array('type' => 'password', 
                 'required' => true, 
                 'invalid_message' => ErrorMessages::PASSWORDS_DONOT_MATCH, 
                 'options' => array('attr' => array('class' => 'password-field form-control')),                     
                 'first_options' => array('label' => false, 
                       //here I enable error bubbling so that on the twig it will render the error under the first password text field 
                       'error_bubbling' => true, 
                       'label_attr'=>array('class'=>'col-sm-3 control-label')), 
                 'second_options' => array('label' => false,                  
                       'label_attr'=>array('class'=>'col-sm-3 control-label')))); 
    
관련 문제