miércoles, 28 de marzo de 2012

Symfony 2: múltiples formularios en una página

Al momento de usar dos formularios no relacionados en la misma pagina, surgieron mas complicaciones de las que me esperaba. Aunque cada formulario estuviera definido en su propio controlador y funcionaran correctamente cuando estaban aislados, al mostrarlos en la misma pagina obtuve dos errores:
  • This form should not contain extra fields
  • The CSRF token is invalid
La manera de solucionarlo fue asignarle un nombre a cada formulario para comprobar que la solicitud esta asociada a dicho formulario. Para poder darle nombre a un formulario hay que acceder al servicio brindado por FormFactory usando el metodo createNamedBuilder. Un ejemplo con la estructura básica seria el siguiente:


Un par de aclaraciones, Acme es una entidad, AcmeType es un formulario definido en dicha clase.

Como se puede ver, el nombre del formulario es acme_form, por el cual se puede identificar cual fue el formulario que genero la petición POST.