В Symfony я создал собственный тип формы и contraint.Ограничение пользовательской формы Symfony записывает ошибку в родительскую форму
Ограничение прикрепляется к типу формы, как это:
->add('customField', 'customField', array(
'required' =>
'mapped' => false,
'constraints' => array(new CustomField()),
))
, где CustomField это класс ограничений.
Validate ограничения валидатора() метод выглядит следующим образом:
public function validate($value, Constraint $constraint)
{
//I know this will always fail, but it's just for illustration purposes
$this->context->addViolation($constraint->message);
}
Я изменил шаблон по умолчанию формы как это:
{% block form_row -%}
<div class="form-group">
{{- form_widget(form) -}}
{{- form_errors(form) -}}
</div>
{%- endblock form_row %}
{% block customField_widget %}
{% spaceless %}
<!-- actually different but you get the idea -->
<input type="text" name="customField" id="customField" />
{% endspaceless %}
{% endblock %}
{% block form_errors -%}
{% if errors|length > 0 -%}
{%- for error in errors -%}
<small class="help-block">
{{ error.message }}
</small>
{%- endfor -%}
{%- endif %}
{%- endblock form_errors %}
И в шаблоне, где отображаются форма, I 'добавил код, чтобы отображать ошибки, связанные со всей формой, а не отдельные полевые ошибки:
{{ form_start(formAdd) }}
{% if formAdd.vars.valid is same as(false) -%}
<div class="alert alert-danger">
<strong>Errors!</strong> Please correct the errors indicated below.
{% if formAdd.vars.errors %}
<ul>
{% for error in formAdd.vars.errors %}
<li>
{{ error.getMessage() }}
</li>
{% endfor %}
</ul>
{% endif %}
</div>
{%- endif %}
...
Проблема со всем этим, валидатором этого конкретного поля, связывает нарушение ограничения с объектом формы, а не с типом формы customField. Это приводит к тому, что ошибка окончательно отображается с общими ошибками формы, а не отображается как ошибка поля.
Теперь это не единственный настраиваемый тип формы и валидатор, который я добавил, но это единственный, который отображает это поведение, без меня, чтобы определить разницу между этим и остальными. Можете ли вы определить, что здесь не так?
я смог сократить область поиска. Нет ничего плохого в ограничении или валидаторе. По-видимому, тип пользовательской формы вызывает эту проблему. – Zorrocaesar