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