0

我遇到了一個問題,當我嘗試render an error messagerepeated password field關聯。問題是invalid_message,如果我實現了樹枝如下沒有得到呈現,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_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> 
     ........ 

不過,如果我使用form_row

 {{ 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> 
     ........ 

誤差會顯示在密碼文本框的頂部(這不是我放置錯誤的區域,因爲span實際上位於文本框的下方),也沒有突出顯示文本框。我盡力解決這個問題,但沒有運氣。如果您的專家能夠提供任何專家指導來解決此問題,我將非常感激。 :)

FYI:表單控件

$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'))));