forms - form_widget不显示invalid_message错误

标签 forms validation symfony error-handling password-confirmation

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

仅供引用:表单 Controller 上的重复密码
$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_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 Controller
    $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'))));   
    
  • 关于forms - form_widget不显示invalid_message错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26228605/

    相关文章:

    c# - 窗体;检测表单从另一个表单关闭

    javascript - 计算字段作为表单/php 输入

    php - Symfony2 安全 @Secure 注释不起作用

    php - 学说模式创建找不到常量

    php - 无法在一个 php 页面上更新数据库

    java - Controller 方法上的自定义 validator

    Django 表单验证、clean() 和文件上传

    java - 实现 Java 注释进行验证

    forms - Symfony2 : How to create entity form with creation of multiple subentities?

    javascript - 在操作时以 HTML 形式调用 php 但不重定向