В шаблоне Twig я проверяю, имеет ли поле ошибку, например:
{% if form.points.get('errors') is not empty %}
Есть ли какой-либо метод вроде:
{% if form.points.hasErrors() %}
сделать это проще? Это не большая разница, но если я не могу сделать это проще, почему бы и нет.
Этот метод не существует. Я обычно делаю {% if form.points.vars.errors|length %}
.
form.vars.valid
с form.vars.valid
работает отлично.
Лучший способ, который я нашел, - использовать этот вид кода
{% if not form.vars.valid %}
<div class="alert alert-error">
{{ form_errors(form) }}
</div>
{% endif %}
{{ form_errors(form.somefield) }}
все еще работает.
Вы также можете проверить наличие ошибок при переопределении полей:
{% block field_row %}
{% spaceless %}
<div class="control-group {% if errors %}error{% endif %}">
{{ form_label(form) }}
<div class="controls">
{{ form_widget(form) }}
{{ form_errors(form) }}
</div>
</div>
{% endspaceless %}
{% endblock field_row %}
Для более глубокой настройки формы я делаю:
<div class="form-group {% if form.MYFORMINPUT.vars.valid==false %}has-error{% endif %}">
//some twisted divs
{{form_label(form.MYFORMINPUT)}}
{{form_widget(form.MYFORMINPUT)}}
</div>
Sf2.5
Правильный код (для Symfony 3.4):
{% if form.vars.errors|length %}
Это то, что я использую:
<div class="form-group {{ form.brand.vars.errors|length > '' ? 'has-error' }}">
Поскольку пустой массив разрешает false, вы можете сократить существующую проверку до
{% if form.WIDGET_NAME.get('errors') %}
У меня была аналогичная проблема, но form.points
не существует в моих шаблонах ветки.
Мне пришлось получить количество ошибок в контроллере, а затем передать его в мои шаблоны в качестве переменной. $form->getErrors()
не ведет себя так, как вы могли бы ожидать в своем контроллере. См. этот вопрос SO для функции, которая правильно примет ошибки формы.
Я создаю расширение ветки, чтобы справиться с этим: мое расширение
public function hasError($string)
{
if(strlen($string) > 4)
return true;
return false;
}
Я использую его так, как в twig
{{ has_error(form_errors(form.username)) ? form_errors(form.username) : '' }}
error_bubbling
. Я добавил PR в поваренную книгу Symfony, чтобы улучшить документацию. Не стесняйтесь голосовать за это здесь: github.com/symfony/symfony-docs/issues/6145