Simple check if form field has errors in Twig template

SymfonyTwigSymfony Forms

Symfony Problem Overview


In Twig template I check if a field has an error like this:

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

Is there any method like:

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

to do it simpler? It's not a big difference, but if I can't do it easier why not.

Symfony Solutions


Solution 1 - Symfony

better way I found, is to use this kind of code

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

Solution 2 - Symfony

That method does not exist. I typically do {% if form.points.vars.errors|length %}.

Solution 3 - Symfony

You can also check for errors when overriding field rendering:

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

Solution 4 - Symfony

For deeper form customization I do:

<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

Solution 5 - Symfony

If you are using symfony 4, you can check errors existence with this code

{% if form_errors(registrationForm) %}
    <div class="alert alert-danger">        
        {{ form_errors(registrationForm) }}
    </div>
{% endif %}

Solution 6 - Symfony

The simplest way of checking whether the form has an error:

{% if not form.vars.errors|length %}

{% endif %}

Symfony version >= 4

Solution 7 - Symfony

Since an empty array resolves to false, you can shorten your existing check to

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

Solution 8 - Symfony

This is what i use :

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

Solution 9 - Symfony

I had a similar problem, but form.points doesn't exist in my twig templates.

I had to get the number of errors in the controller, then pass it into my templates as a variable. $form->getErrors() does not behave as you might expect in your controller though. See this SO question for a function that will get the form errors correctly.

Solution 10 - Symfony

i have create a twig extension to handle this: my extension

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

i use it like this in twig

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDawid OhiaView Question on Stackoverflow
Solution 1 - SymfonybirkoView Answer on Stackoverflow
Solution 2 - SymfonyKris WallsmithView Answer on Stackoverflow
Solution 3 - SymfonyjkucharovicView Answer on Stackoverflow
Solution 4 - Symfonyd3uterView Answer on Stackoverflow
Solution 5 - SymfonyEbenezer NikabouView Answer on Stackoverflow
Solution 6 - SymfonyAbdulkerim JemalView Answer on Stackoverflow
Solution 7 - SymfonyRiccardo GalliView Answer on Stackoverflow
Solution 8 - SymfonymrDjoukView Answer on Stackoverflow
Solution 9 - SymfonyadaveaView Answer on Stackoverflow
Solution 10 - SymfonyBelgaView Answer on Stackoverflow