2012-01-18 8 views
54

В шаблоне Twig проверить, если поле имеет ошибку, как это:Простая проверка, если поле формы имеет ошибки в шаблоне Twig

{% if form.points.get('errors') is not empty %} 

Есть ли способ, как:

{% if form.points.hasErrors() %} 

, чтобы сделать это проще? Это не большая разница, но если я не могу сделать это проще, почему бы и нет.

+0

Многие ответы были добавлены, а некоторые из них зависят от параметра 'error_bubbling'. Я добавил PR в кулинарную книгу symfony, чтобы улучшить документы. Вы можете проголосовать за него здесь: https://github.com/symfony/symfony-docs/issues/6145 – webDEVILopers

ответ

78

Этот способ не существует. Обычно я делаю {% if form.points.vars.errors|length %}.

+9

Это не работает для меня, используя Symfony 2.3. Решение birko с 'form.vars.valid' отлично работает. – binarious

+0

@binarious Этот метод отлично работает в Symfony 2.3, но вы правы, теперь решение birko лучше. – Maxooo

+0

При возникновении ошибки это решение будет выдавать '0' ** IF **' error_bubbling' в формате формы устанавливается в 'True'. – BentCoder

-1

У меня была аналогичная проблема, но form.points не существует в моих шаблонах.

Мне пришлось получить количество ошибок в контроллере, а затем передать его в мои шаблоны в качестве переменной. $form->getErrors() не ведет себя так, как вы могли бы ожидать от своего контроллера. См. this SO question для функции, которая будет корректно получать ошибки формы.

+6

вам нужно заменить «очки» на имя вашего поля – Emilie

16

Вы также можете проверить на наличие ошибок при переопределении визуализации поля:

{% 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 %} 
+1

Большое вам спасибо! – Sasa

+1

Точно то, что я искал, прекрасный ответ. – apfelbox

90

лучший способ я нашел, чтобы использовать этот вид кода

{% if not form.vars.valid %} 
<div class="alert alert-error"> 
    {{ form_errors(form) }} 
</div> 
{% endif %} 
+0

К сожалению, это не работает для меня, при вызове '{{form_errors (form.somefield)}}' все еще работает. – ex3v

+0

@ ex3v это зависит от того, как вы установили свою ошибку bbbling – birko

+1

не могли бы вы расширить свой ответ? – ex3v

0

Поскольку пустой массив решает ложным, вы можете сократить существующую проверку до

{% if form.WIDGET_NAME.get('errors') %} 
-1

Я создал веточку расширение справиться с этим: мое расширение

public function hasError($string) 
{ 
    if(strlen($string) > 4) 
     return true; 
    return false; 
} 

я использовать его, как это в веточке

{{ has_error(form_errors(form.username)) ? form_errors(form.username) : '' }} 
12

Для более глубокого вида настройки я:

<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

0

Это то, что я использую:

<div class="form-group {{ form.brand.vars.errors|length > '' ? 'has-error' }}">