【问题标题】:form_widget doesn't display invalid_message errorsform_widget 不显示 invalid_message 错误
【发布时间】:2014-10-07 04:34:28
【问题描述】:

当我尝试将render an error message 关联到repeated password field 时遇到了问题。问题是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 实际上位于文本框下方)并且也没有突出显示文本框。我尽力解决这个问题,但没有运气。如果您的专家可以提供任何专家指导来解决此问题,我将不胜感激。 :)

仅供参考:表单控制器上的重复密码

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

【问题讨论】:

    标签: forms validation symfony error-handling password-confirmation


    【解决方案1】:

    解决方案很简单,我会发布这个,以防将来有人遇到这个问题。解决方案是使用forms_row 呈现字段,例如:{{ form_row(form.password.first) }} 并将'error_bubbling' =&gt; 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'))));   
      

    【讨论】:

    • 谢谢,我在调试时在控制台中看到了正确的错误,但不知道为什么它没有显示在屏幕上。对我来说,我只是想念'error_bubbling' =&gt; true
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 2012-03-09
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多