2012-01-18 10 views
54

In template Twig ho controllare se un campo ha un errore come questo:controllo semplice se il campo form ha degli errori di template Twig

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

Esiste un metodo simile:

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

per farlo più semplice? Non è una grande differenza, ma se non riesco a farlo più facile perché no.

+0

Molte risposte sono state aggiunte e alcune dipendono dall'impostazione 'error_bubbling'. Ho aggiunto un PR al libro di cucina di symfony per migliorare i documenti. Sentiti libero di votare qui: https://github.com/symfony/symfony-docs/issues/6145 – webDEVILopers

risposta

78

Questo metodo non esiste. Io di solito faccio {% if form.points.vars.errors|length %}.

+9

Questo non funziona per me usando Symfony 2.3. la soluzione di birko con 'form.vars.valid' funziona bene. – binarious

+0

@binarious Questo metodo funziona bene in Symfony 2.3 ma hai ragione, la soluzione di birko è migliore ora. – Maxooo

+0

Quando c'è un errore, questa soluzione produrrà '0' ** IF **' error_bubbling' è impostato su 'True' nel tipo di modulo. – BentCoder

-1

Ho avuto un problema simile, ma form.points non esiste nei miei modelli di ramoscello.

Ho dovuto ottenere il numero di errori nel controller, quindi passarlo nei miei modelli come variabile. $form->getErrors() però non si comporta come ci si aspetterebbe dal controller. Vedere this SO question per una funzione che otterrà correttamente gli errori del modulo.

+6

devi sostituire "punti" con il nome del tuo campo – Emilie

16

Si può anche verificare la presenza di errori quando imperativi di rendering campo:

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

Grazie mille! – Sasa

+1

Esattamente quello che cercavo, risposta perfetta. – apfelbox

90

migliore modo che ho trovato, è quello di utilizzare questo tipo di codice

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

Purtroppo non funziona per me, mentre chiama '{{form_errors (form.somefield)}}' funziona ancora. – ex3v

+0

@ ex3v dipende da come è stato impostato il bubbling dell'errore – birko

+1

potresti espandere la risposta? – ex3v

0

Dato un array vuoto decide di falso, è possibile abbreviare il vostro controllo esistente per

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

ho creare un ramoscello estensione a gestire questo: mia estensione

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

mi usano come questo in ramoscello

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

per una più profonda personalizzazione modulo che faccio:

<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

Questo è quello che uso:

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