2015-07-10 13 views
5

Ho un modello con più carrelli. Ci può essere una quantità variabile di carrelli, non c'è un limite fisso.Come rendere lo stesso modulo più volte in Symfony2?

In ogni carrello desidero avere un modulo in cui l'utente può selezionare un paese. Se invia il modulo, devono essere stabiliti i costi di spedizione.

Ora sto facendo quanto segue per realizzarla in ramoscello:

{% for cart in carts %} 
    {# Some template stuff #} 
    {{ form_start(form) }} 
     <div class="form-input"> 
     <label for="country" class="middle-color">Country <span class="active-color">*</span></label> 
     {{ form_widget(form.country) }} 
    {{ form_end(form) }} 
{% endfor %} 

Questo è il mio generatore di forma:

$form = $this->createFormBuilder() 
    ->add('country', 'choice', array('choice_list' => $choiceList, 'label' => 'country', 
     'attr' => array('class' => "custom-selectbox dark-color light-gradient"))) 
    ->getForm(); 

Ora il problema è che questa logica funziona bene per la prima spesa , ma non viene visualizzata alcuna forma per ulteriori carrelli. Come posso affrontare questo?

risposta

-1

È necessario utilizzare il tipo di modulo collection. Ecco una guida per iniziare con How to Embed a Collection of Forms

P.S. Si noti che dopo aver eseguito il rendering di un widget modulo, il componente Modulo lo contrassegna come reso e non esegue il rendering ancora una volta.

+0

non vedo come questo mi aiuterà. Creo un choice_list dipende da dati esterni. Non desidero visualizzare più volte la scelta_list ma l'intero modulo più volte – KhorneHoly

2

Mi sono imbattuto in questa e in un'altra domanda sul problema simile. You can find my first answer for a solution here.

Per concludere, non ho chiamato la funzione createView() sul modulo nel controller, come di solito fatto quando si passa il modulo alla vista, ma nella vista ramoscello stesso.

E.g. nella vostra azione di controllo si fa restituire l'oggetto forma stessa:

return $this->render('AppBundle:Cart:list.html.twig', ['formObject' => $form]; 

e nella vista si dovrebbe impostare il modulo in ogni ciclo:

{% for cart in carts %} 
    {# Some template stuff #} 
    {% set form = formObject.createView %} 
    {{ form_start(form) }} 
     <div class="form-input"> 
     <label for="country" class="middle-color">Country <span class="active-color">*</span></label> 
     {{ form_widget(form.country) }} 
    {{ form_end(form) }} 
{% endfor %} 
Problemi correlati