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.  

2 comentarios:

  1. Sabes como puedo editar múltiples formularios.

    quiero mostrar múltiples formularios (del mismo tipo).

    es que creen una entidad donde se crea una relacionan evaluación y competencias. ademas tiene un campo extra de nota.

    para cada persona hay 12 competencias y la idea es mostrar un listado con todas las competencias de esa persona y editar solo campo nota.

    pero no quiero pasar a otra pagina, por que son muchos datos 12*6 por cada persona de un total de 500.

    me podrias orientar. gracias

    ResponderEliminar
  2. Hola Dario.

    Dejame ver si entendí el modelo.

    Cada persona realiza una evaluación de una competencia determinada, por lo tanto tendrá una nota asociada.

    Y querés una sola pagina con las 500 personas.

    Como primera opción, te diría que miraras como crear collection forms.

    En tu caso seria crear un formulario llamado por ejemplo superform y añadir una colección de personas. Siguiendo este modelo todos los cambios que realices a cada persona en superform se veran reflejado en las entidades correspondientes.

    Te dejo el link al cookbook

    http://symfony.com/doc/2.1/cookbook/form/form_collections.html

    Espero que eso sea lo que buscabas.

    Un saludo.

    ResponderEliminar