form_widget не отображает ошибки invalid_message

Я столкнулся с проблемой, когда я пытаюсь 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')))); 

1 ответ

Решение

Решение было простым, и я публикую это на тот случай, если кто-нибудь столкнется с этой проблемой в будущем. Решение состоит в том, чтобы визуализировать поля, используя 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'))));   
    
Другие вопросы по тегам