Простая проверка, если в поле формы есть ошибки в шаблоне Twig - PullRequest
57 голосов
/ 18 января 2012

В шаблоне Twig я проверяю, есть ли в поле ошибка, подобная этой:

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

Существует ли какой-либо метод вроде:

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

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

Ответы [ 9 ]

101 голосов
/ 24 июля 2013

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

{% if not form.vars.valid %}
<div class="alert alert-error">
    {{ form_errors(form) }}
</div>
{% endif %}
84 голосов
/ 18 января 2012

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

18 голосов
/ 16 мая 2012

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

{% 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 %}
12 голосов
/ 03 ноября 2014

Для более глубокой настройки формы я делаю:

<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 голосов
/ 20 декабря 2018

Правильный код (для Symfony 3.4):

{% if form.vars.errors|length %}
0 голосов
/ 12 июля 2017

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

 <div class="form-group {{ form.brand.vars.errors|length > '' ? 'has-error' }}">
0 голосов
/ 04 августа 2014

У меня есть расширение для ветки, чтобы справиться с этим: мое расширение

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

Я использую его вот так в ветке

{{ has_error(form_errors(form.username)) ? form_errors(form.username) : '' }}
0 голосов
/ 24 июля 2014

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

{% if form.WIDGET_NAME.get('errors') %}
0 голосов
/ 14 марта 2012

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

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

...