2012-05-17 8 views
9

Esto es una tarea fácil de resolver en Symfony2, pero estoy realmente atrapado aquí:Symfony2: ¿Cómo crear un formulario de entidad con creación de subentidades múltiples?

Estoy construyendo una tienda muy simple. Hay tres entidades: Products, Customers y Orders. El último contiene tres columnas: customer_id, product_id y quantity. La tienda simplemente consiste en una página que enumera todos los productos con un campo de selección para cada uno para elegir la cantidad, seguido de un formulario para ingresar los datos de sus clientes.

No tengo ningún problema en crear el formulario para los datos del cliente ni en enumerar los productos en sí (sin los campos de selección).

Pero, ¿cómo creo un formulario que incluya los campos seleccionados de los productos, que luego deberían convertirse en entidades de pedido?

Jugué con colecciones de formularios y entiendo todos los ejemplos dados al agregar etiquetas a una entidad, etc. Pero no puedo entender cómo ajustarlo a mi situación.

Lo que tengo en mente es algo como esto:

// Create new customer 
$customer = new Customer(); 

// At this point, create form and validate it. 
// Having trouble here, need a hint to get it right. 
... 

// If form is ok, loop thru all the products. 
// Since I do not know yet how to define the form, 
// I don't know yet what to loop over, too. 
foreach(.....){ 
    if($quantity > 0){ 
     $order = new Order(); 
     $order->setQuantity($quantity); 
     $order->setProduct($product); 
     $customer->addOrder($order); 
    } 
} 

// then persist $customer, cascading its orders. 
... 

he pasado horas en este. Cualquier ayuda es muy apreciada. ¡Gracias!

Actualización: Finalmente lo conseguí trabajando. Creé un OrderFactory y un OrderFormType y tuve que cambiar un poco la configuración general. El AcmePizzaBundle que se menciona en las respuestas a continuación fue de gran ayuda para corregir las piezas faltantes.

+2

Creo que estás haciendo esto más complicado de lo que debería ser. Necesita un OrdersFormType que tendrá una colección de entidad de producto (para la lista de productos), así como un campo de cantidad. A continuación, inserta una colección de OrdersFormTypes en su CustomerFormType. Pero creo que se ahorrará algunos dolores de cabeza si sigue un patrón de nomenclatura más convencional. – Cerad

Respuesta

9

Eche un vistazo a un ejemplo: AcmePizzaBundle. Tiene 4 entidades que necesita: pizza, pedido, artículo de pedido, cliente.

+0

Gracias. Este es un buen ejemplo en muchos aspectos. Sin embargo, sé cómo crear un formulario de pedido dinámico como en este ejemplo. Mi problema es muchísimo más simple: ¿cómo podría enumerar todas las pizzas disponibles desde el principio y luego solo elegir la cantidad que deseo? – sprain

+0

@sprain ¿te refieres a cómo diseñar el carro donde un usuario puede elegir la cantidad? – meze

+0

No es como un carrito de compras, sino simplemente como una tienda muy simple con cantidades seleccionadas. Me gusta esto: http://sprain.public.s3.amazonaws.com/stuff/simplestore.png No sé cómo definir el formulario para que funcione. – sprain

Cuestiones relacionadas