2012-05-04 21 views
21

Bien, hoy actualicé mi base de datos con nueva información de nuestra base de datos en vivo ... Y desde entonces he estado teniendo problemas en uno de mis formularios. Si necesita algún código, hágamelo saber y lo editaré y publicaré el código necesario ...symfony2 CSRF no válido

Tengo un formulario de informe que tiene un campo de rango de fecha y un menú desplegable para un departamento de agente. Cuando por primera vez a visitar la página veo esto al comienzo de la forma:

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

Así que ir a una de mis otras formas que tiene el mismo tipo de información, y comprobar el _token a cabo y esto es lo que sale:

<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 primera de ellas es la que muestra el error y el SimpleSalesReport no lo hace ... ¿Alguna idea de por qué está haciendo esto o cómo puedo solucionarlo?

Gracias ..

Respuesta

25

Es usted por casualidad utilizando $ form-> bindRequest() en la acción que produce el error CSRF? Tuve este problema No deberías vincular la solicitud de un nuevo formulario. Si envías el formulario a la misma acción, envolver el bindRequest en un condicional que comprueba si el método es POST:

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

¡el hombre es un genio freakin! Eso es EXACTAMENTE lo que estaba haciendo ... ¡Pero has venido y salvaste el día! – Justin

+22

Además, recuerde agregar form_rest (formulario) en la parte inferior, como el último campo en el formulario. Symfony se preocupa por insertar el token CSRF por ti con esa declaración. http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template – krishna

+0

@krishna Eso es exactamente lo que me faltaba; copiar/pegar descuidado de mi parte! – OrganicPanda

18

Este error me tenía loco por día! Gracias krishna! Si en su plantilla de formulario elige no utilizar el comportamiento de formulario predeterminado {{ form_widget(form) }} DEBERÍA poner {{ form_rest(form) }} Espero que esto pueda ayudar a cualquier otra persona!

+0

form_rest es el savier –

+1

form_rest donde me estaba yendo mal también. ¡Gracias! –

22

No hay ningún problema al usar {{ form_widget(form) }} para compilar su formulario personalizado. Todo lo que tiene que hacer es agregar el _token así: {{ form_widget(form._token) }}