2012-05-04 9 views
21

Okay, heute habe ich meine Datenbank mit neuen Informationen aus unserer "Live" -Datenbank aktualisiert ... und seitdem habe ich Probleme mit einem meiner Formulare. Wenn Sie einen Code benötigen, lassen Sie mich wissen, und ich werde dies bearbeiten und den Code erforderlich ...symfony2 CSRF ungültig

Ich habe ein Berichtsformular, das ein Datumsbereich und ein Dropdown für eine Agent-Abteilung hat. Wenn ich besuchen zuerst die Seite sehe ich am Anfang der Form:

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

ich zu einem meiner anderen Formen So gehen, die die gleiche Art von Informationen hat, und überprüfen Sie die _token und diese kommt aus ist was:

<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" /> 

die erste ist derjenige, der den Fehler zeigt, und der SimpleSalesReport nicht ... Jede Idee, warum dies zu tun dies oder wie ich es beheben kann?

Dank ..

Antwort

25

Sind Sie zufällig $ form-> BindRequest() in der Aktion verwendet, die die CSRF Fehler produziert? Ich hatte dieses Problem. Sie sollten die Anforderung für ein neues Formular nicht binden. Wenn Sie das Formular auf die gleiche Aktion Mitteilung verfassen, wickeln Sie das BindRequest in einem bedingten, der überprüft, ob Methode POST ist:

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

der Mann ist ein Freakin Genie! Genau das, was ich getan habe ... Aber du bist gekommen und hast den Tag gerettet! – Justin

+22

Denken Sie auch daran, form_rest (Formular) am unteren Rand als letztes Feld im Formular hinzuzufügen. Symfony kümmert sich darum, CSRF-Token mit dieser Anweisung einzufügen. http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template – krishna

+0

@ krishna Genau das habe ich vermisst; schlampig kopieren/einfügen meinerseits! – OrganicPanda

18

Dieser Fehler hatte mich für Tage verrückt! Danke krishna! Wenn Sie in Ihrer Formularvorlage wählen, dass Sie nicht das Standardformular Verhalten {{ form_widget(form) }} verwenden, sollten Sie setzen {{ form_rest(form) }} Hope das könnte jedem anderen helfen!

+0

form_rest ist der schlauere –

+1

form_rest war wo ich auch falsch ging. Vielen Dank! –

22

Es gibt kein Problem mit {{ form_widget(form) }}, um Ihr benutzerdefiniertes Formular zu erstellen. Alles, was Sie tun müssen, ist hinzuzufügen _token wie folgt: {{ form_widget(form._token) }}