form custom createform change forms symfony

forms - custom - Formulario Symfony2: seleccione una entidad o agregue una nueva



symfony render form (5)

El tipo de formulario de collection permite agregar y eliminar sobre la marcha con el atributo allow_add y allow_delete .

Más información siguiendo estos 2 enlaces:

Si no desea obtener formularios complementarios en la misma página, puede integrarlos en cuadros de diálogo ... Pero definitivamente necesita un formulario para crear nuevos elementos ...

Tengo una order y una entidad client .

Me pregunto si es posible con el sistema de formularios Symfony2 real crear un formulario de pedido que permita:

  1. Seleccione varios clientes de un menú desplegable (combinación de tipo de formulario de collection y entity )
  2. Y para crear nuevos clientes sobre la marcha (la forma predeterminada para el tipo de collection ) si no está en la lista desplegable.

He visto una forma de hacerlo creando múltiples formularios en la misma página, pero esta no es la forma en que me gustaría lograrlo.

¿Hay alguna forma mejor de hacer esto?


Por mi parte, tuve el mismo tipo de problema y lo resolví creando 2 atributos en formType ;

Por ejemplo, para usted sería:

customer->entity new_customer-> collection

En su archivo de entidad de orden, deberá agregar 3 métodos (getter, setter, y removedor). Getter y removedor no hacen nada, pero setter debería llamar al setCustomer(c)

¡No estoy seguro de si es la mejor manera, pero es la única manera en que lo descubro!


Puede asignar dos campos en un formulario a la misma propiedad usando la opción property_path . Luego, usando eventos de formulario, use los datos enviados para tomar una decisión y modifique el formulario de manera que solo uno de los campos tenga una opción mapped que sea true .


Si lo he entendido, quiere crear y almacenar nuevos clientes en un Formulario "en marcha", por el momento. Creo que tienes que hacer eso usando JavaScript y establecer una acción adicional en tu controlador.

  1. JS -> Capture el evento para agregar un nuevo cliente a su base de datos (es decir, haga clic en "Agregar nuevo" evento de clic)
  2. JS -> Dentro de este evento, llama a través de AJAX a tu controlador con los valores del nuevo cliente. (Usar FOSJsRoutingBundle es fácil de hacer)
  3. Symfony2 -> Dentro de su nueva acción, almacene el nuevo cliente en su base de datos.
  4. JS -> Evento OnSuccess, en su llamada AJAX, agregue el nuevo Cliente a su DropDownBox (ddb.append (nueva etiqueta de elemento)

Simplemente haciendo eso, tiene su nuevo cliente almacenado en la base de datos y se agrega a su dropdownbox


Tuve un problema similar que puede conducir a su resolución:

Tengo una relación de Categoría e Ítem (Muchos a Uno) y quería seleccionar un ítem existente o crear un ítem nuevo.

En mi clase de formulario:

$builder->add(''item'', ''entity'', array( ''label'' => ''Item'', ''class'' => ''ExampleItemBundle:Item'', )); $builder->add(''itemNew'', new EmbedItemForm(), array( ''required'' => FALSE, ''mapped'' => FALSE, ''property_path'' => ''item'', )); $builder->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) { $data = $event->getData(); $form = $event->getForm(); if (!empty($data[''itemNew''][''name''])) { $form->remove(''item''); $form->add(''itemNew'', new EmbedItemForm(), array( ''required'' => TRUE, ''mapped'' => TRUE, ''property_path'' => ''item'', )); } });