2012-01-31 47 views
5

Estoy cambiando algunos campos a través de AJAX y cuando intento guardar un formulario recibo un error que Extra fields are not allowed.Symfony 2 campos adicionales

¿Cómo cambiar esa propiedad del validador como validatorPass() en sf1.4?
O su posible cambio de forma para aceptar campos adicionales?

Im usando SonataAdminBundle para crear formularios.

Respuesta

20

Podría quitar los campos adicionales de los datos de la solicitud ante ellos unirse a la forma:

// The JSON PUT data will include all attributes in the entity, even 
    // those that are not updateable by the user and are not in the form. 
    // We need to remove these extra fields or we will get a 
    // "This form should not contain extra fields" Form Error 
    $data = $request->request->all(); 
    $children = $form->all(); 
    $data = array_intersect_key($data, $children); 
    $form->bind($data); 
+0

Exactamente lo que he buscado, @rogerh, ¡muchas gracias! – Serg

+0

En mi caso tuve que cambiar la primera línea a: $ data = $ request-> request-> get ($ form-> getName()); – Serg

+0

¿Hay alguna forma de obtener $ request en un eventSubscriber para que esta solución funcione en todos los formularios donde $ builder agrega el eventSubscriber? – Simon

0

No puede agregar campos adicionales ya que no están declarados en la entidad. Hay una solución para eludir su problema:

  • crear un formulario dinámico donde puede agregar campos adicionales.

tienes un ejemplo de cómo se trabaja en github: https://github.com/Keirua/KeiruaProdCustomerDemoBundle

y el tutorial completo en esta dirección (pero en francés):

http://blog.keiruaprod.fr/2012/01/18/formulaires-dynamiques-avec-symfony2/

PD: Parece Sonata usa de esta manera para agregar campos.

+0

Hmm .. los campos están relacionados con la entidad de muchos a muchos. Pero quiero en la lista solo los elementos que están relacionados con una categoría. – Pawel

+0

La relación utilizada es OneToMany ya que crea un elemento nuevo que se vinculará a la categoría. – Chopchop

1

En mi caso, la solución era muy simple, basta con añadir allow_add a su campo de recolección, a mi ejemplo

 ->add('Details', 'collection', array(
      'type' => new DetailsType(), 
      'allow_add' => true, 
      'allow_delete' => true, 
      'label' => ' ' 
     )) 

también puede comprobar la documentación oficial para este problema http://symfony.com/doc/current/cookbook/form/form_collections.html

Lo primero que debe hacer es informar a la colección de formularios que recibirá un número desconocido de etiquetas. Hasta ahora, ha agregado dos etiquetas y el tipo de formulario espera recibir exactamente dos; de lo contrario, se generará un error: este formulario no debe contener campos adicionales. Para que esto sea flexible, agregue la opción allow_add a su campo de colección.

+0

Esto funciona. Gracias. – TrtG

Cuestiones relacionadas