2012-05-04 14 views
21

OK, così oggi ho aggiornato il mio database con nuove informazioni dal nostro database "live" ... E da allora ho avuto problemi su uno dei miei moduli. Se hai bisogno di qualche codice fammi sapere e modifico questo e postare il codice necessario ...symfony2 CSRF non valido

Ho un modulo di rapporto che ha un campo di intervallo di date e un menu a tendina per un reparto agente. Quando ho visitare la pagina che vedo questo all'inizio della forma:

The CSRF token is invalid. Please try to resubmit the form

così vado verso una delle mie altre forme che ha lo stesso tipo di informazioni e controllare la _token fuori e questo è quello che viene fuori:

<input type="hidden" id="ecs_crmbundle_TimeClockReportType__token" name="ecs_crmbundle_TimeClockReportType[_token]" value="87e358fbc4d6d3e83601216b907a02170f7bcd92" /> 
<input type="hidden" id="ecs_crmbundle_SimpleSalesReportType__token" name="ecs_crmbundle_SimpleSalesReportType[_token]" value="87e358fbc4d6d3e83601216b907a02170f7bcd92" /> 

la prima è quella che mostra l'errore, e il SimpleSalesReport non si ... Qualsiasi idea del perché questo sta facendo questo e come posso risolvere il problema?

Thanks ..

risposta

25

Sei per caso utilizzando $ form-> bindRequest() nell'azione che produce l'errore CSRF? Ho avuto questo problema. Non si dovrebbe impegnare la richiesta di un nuovo modulo. Se stai scrivendo il modulo per la stessa azione, avvolgere il bindRequest in un condizionale che verifica se il metodo è POST:

if ($this->getRequest()->getMethod() == 'POST') { 
    $form->bindRequest($this->getRequest()); 
    if ($form->isValid()) { 
    ... 
    } 
} 
+3

l'uomo è un genio bizzarro! Questo è ESATTAMENTE quello che stavo facendo ... Ma tu sei venuto e hai salvato il giorno! – Justin

+22

Inoltre, ricordarsi di aggiungere form_rest (modulo) in basso, come ultimo campo nel modulo. Symfony si prende cura dell'inserimento di token CSRF per te con questa affermazione. http://symfony.com/doc/current/book/forms.html#rendering-a-forma-in-a-template – krishna

+0

@krishna Questo è esattamente ciò che mi mancava; copia/incolla sciatta da parte mia! – OrganicPanda

18

Questo errore mi ha fatto impazzire per giorni! Grazie krishna! Se nel modello di modulo si sceglie di non utilizzare il comportamento predefinito del modulo {{ form_widget(form) }} è necessario inserire {{ form_rest(form) }} Spero che questo possa aiutare qualcun altro!

+0

form_rest è il saver –

+1

form_rest era dove stavo sbagliando anche io. Grazie! –

22

Non c'è alcun problema nell'utilizzo di {{ form_widget(form) }} per creare il modulo personalizzato. Tutto quello che dovete fare è aggiungere in questo modo: {{ form_widget(form._token) }}

Problemi correlati