Proste sprawdzenie, czy pole formularza ma błędy w szablonie gałązki

W szablonie Twig sprawdzam czy pole ma taki błąd:

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

Czy jest jakaś metoda typu:

{% if form.points.hasErrors() %}
Żeby zrobić to prościej? To nie jest duża różnica, ale jeśli nie mogę zrobić tego łatwiej, dlaczego nie.
Author: Lars Strojny, 2012-01-18

8 answers

Ta metoda nie istnieje. Zazwyczaj robię {% if form.points.vars.errors|length %}.

 79
Author: Kris Wallsmith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-18 18:35:52

Lepszym sposobem, jaki znalazłem, jest użycie tego rodzaju kodu

{% if not form.vars.valid %}
<div class="alert alert-error">
    {{ form_errors(form) }}
</div>
{% endif %}
 96
Author: birko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-24 06:07:23

Można również sprawdzić, czy nie występują błędy podczas nadpisywania renderowania pól:

{% 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 %}
 17
Author: jkucharovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-16 08:42:39

Dla głębszego dostosowania formy robię:

<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

 12
Author: d3uter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-02 22:20:42

Ponieważ pusta tablica zostanie rozwiązana na false, można skrócić istniejące sprawdzenie do

{% if form.WIDGET_NAME.get('errors') %}
 0
Author: Riccardo Galli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-24 10:31:36

Tego używam:

 <div class="form-group {{ form.brand.vars.errors|length > '' ? 'has-error' }}">
 0
Author: mrDjouk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-12 10:12:22

Miałem podobny problem, ale form.points nie istnieje w moich szablonach gałązek.

Musiałem pobrać liczbę błędów w kontrolerze, a następnie przekazać je do moich szablonów jako zmienną. $form->getErrors() nie zachowuje się tak, jak można się spodziewać w kontrolerze. Zobacz to pytanie dla funkcji, która poprawnie otrzyma błędy formularza.

 -1
Author: adavea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:34

I have create a twig extension to handle this: moje rozszerzenie

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

Używam go tak w gałązce

{{ has_error(form_errors(form.username)) ? form_errors(form.username) : '' }}
 -2
Author: Belga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-04 14:00:23