2012-11-06 8 views
6

Ho problemi con l'utilizzo del generatore di moduli in Symfony2. Per essere precisi, ho bisogno del campo di input che è l'array html, ma non riesco a crearlo con createFormBuilder-> add. Ecco cosa ho provato:Crea campo di immissione array con il generatore di moduli symfony2

$attributesForm = $this->createFormBuilder() 
     ->add('attribute[0]', 'text') ... 

E così via, ma ho la seguente eccezione:

Il nome "attributo [0]" contiene caratteri non validi. I nomi dovrebbero iniziare con una lettera,> cifra o underscore e contenere solo lettere, cifre, numeri, trattini bassi ("_"), trattini> ("-") e due punti (":").

C'è qualche soluzione o devo creare manualmente i campi?

Grazie in anticipo!

EDIT: per chiarire questo ulteriore ... Voglio qualcosa di simile da generare:

<div id="msoft_adminbundle_offertype"> 
<div>Name <input type="text" name="name"></div> 
<div>...</div> 
<div>Attribute 0 <input type="text" name="attribute[0]"></div> 
<div>Attribute 1 <input type="text" name="attribute[1]"></div> 
<div>Attribute 3 <input type="text" name="attribute[3]"></div> 
<ul> 
    </ul> 
<p> 
    <button type="submit">Edit</button> 
</p> 

Aiuto?

risposta

4

È possibile creare una matrice di campi di input utilizzando il tipo di campo "raccolta".

documentazione su come utilizzare può essere trovato qui:

Collection documentation

Se questo non è abbastanza chiaro o avete ancora domande che sarà lieto di aiutarvi con loro.

+0

Grazie mille! Sembra giusto, ci proverò ora! – markoub

+0

Spiacenti, note aggiuntive ...: -/Si scopre che ho bisogno di qualcosa di più semplice ... Ho un elenco molto specifico di attributi che l'utente può impostare per ogni offerta, e voglio solo che siano elencati come "attributo [0]", "attributo [1]" e così via. In realtà, ho anche bisogno di utilizzare diversi indici di array, ma non è così importante. Quindi, per riassumere, questo è più complicato, mi consente di aggiungere un'opzione utente per creare nuove forme all'interno di moduli, con set di campi. Voglio solo ottenere invece dei nomi "attribute_1", "attribute_2" e così via, array di attributi. – markoub

+0

Non mi è chiaro cosa vogliate ora. se potessi fornire codice di esempio (html) del modulo come vuoi che venga generato, potrei essere in grado di aiutarti ulteriormente. –

13

Come indica la risposta precedente, utilizzare il tipo di raccolta o un modulo annidato, in cui ogni campo corrisponde a una voce dell'array. E nei casi in cui non si può/non si vuole fare questo, è possibile effettuare le seguenti operazioni:

->add('attribute_0', 'text', array(
    'property_path' => 'attribute[0]', 
)) 
+0

Grazie, ho iniziato a utilizzare le raccolte. – markoub

1

Inoltre è possibile ovveride campo in ramoscello. Esempio:

Dove passo è il tuo indice.

Problemi correlati