2012-05-17 17 views
9

Questo è probabilmente un compito semplice da risolvere in Symfony2 ma sono davvero bloccato qui:Symfony2: Come creare un modulo entità con la creazione di più sottoentità?

Sto costruendo un negozio molto semplice. Esistono tre entità: Products, Customers e Orders. L'ultimo contiene tre colonne: customer_id, product_id e quantity. Il negozio consiste semplicemente in una pagina che elenca tutti i prodotti con un campo di selezione per ciascuno per scegliere la quantità, seguito da un modulo per inserire i dati del cliente.

Non ho problemi a creare il modulo per i dati del cliente né a elencare i prodotti stessi (senza i campi di selezione).

Ma come posso creare un modulo che includa i campi selezionati dei prodotti, che quindi dovrebbero diventare entità dell'ordine?

Ho giocato con le raccolte di moduli e comprendo tutti gli esempi forniti con l'aggiunta di tag a un'entità, ecc. Ma non riesco a capire come adattarlo alla mia situazione.

Quello che ho in mente più o meno così:

// 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. 
... 

ho passato ore su questo. Qualsiasi aiuto è molto apprezzato. Grazie!

Aggiornamento: Alla fine ho funzionato. Ho creato uno OrderFactory e uno OrderFormType e ho dovuto modificare un po 'l'intera impostazione. Il AcmePizzaBundle che è menzionato nelle risposte qui sotto è stato davvero un grande aiuto per ottenere le parti mancanti giusto.

+2

Penso che lo stai rendendo più complicato di quanto dovrebbe essere. È necessario un tipo OrdersFormType che includa una raccolta di entità prodotto (per l'elenco di prodotti) e un campo quantità. Quindi incorpora una raccolta di OrdersFormTypes in CustomerFormType. Ma penso che ti risparmierai qualche mal di testa se seguirai uno schema di denominazione più convenzionale. – Cerad

risposta

9

Dai un'occhiata a un esempio: AcmePizzaBundle. Dispone di 4 entità necessarie: pizza, ordine, ordine, cliente.

+0

Grazie. Questo è un buon esempio in molti aspetti. Tuttavia so come creare un modulo di ordine dinamico come in questo esempio. Il mio problema è probabilmente molto più semplice: come potrei elencare tutte le pizze disponibili fin dall'inizio e quindi scegliere solo la quantità che desidero? – sprain

+0

@sprain intendi come progettare il carrello dove un utente può scegliere la quantità? – meze

+0

Non come un carrello della spesa, ma solo un negozio molto semplice con quantità selezionate. Ad esempio: http://sprain.public.s3.amazonaws.com/stuff/simplestore.png Non so come definire il modulo per farlo funzionare. – sprain

Problemi correlati