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