2012-01-31 6 views
5

Im cambiando alcuni campi tramite AJAX e quando sto cercando di salvare un modulo, ricevo un errore pari a Extra fields are not allowed.Symfony 2 campi aggiuntivi modulo

Come modificare la proprietà di convalida come validatorPass() in sf1.4?
Oppure la sua possibile modifica in forma per accettare campi aggiuntivi?

Im utilizzando SonataAdminBundle per creare moduli.

risposta

20

è possibile rimuovere i campi aggiuntivi dai dati della richiesta prima di legarsi al modulo:

// The JSON PUT data will include all attributes in the entity, even 
    // those that are not updateable by the user and are not in the form. 
    // We need to remove these extra fields or we will get a 
    // "This form should not contain extra fields" Form Error 
    $data = $request->request->all(); 
    $children = $form->all(); 
    $data = array_intersect_key($data, $children); 
    $form->bind($data); 
+0

Esattamente quello che ho cercato, @rogerh, grazie mille! – Serg

+0

Nel mio caso ho dovuto modificare la prima riga in: $ data = $ request-> request-> get ($ form-> getName()); – Serg

+0

C'è un modo per ottenere la richiesta $ in un eventSubscriber affinché questa soluzione funzioni su tutti i moduli in cui $ builder aggiunge l'eventSubscriber? – Simon

0

Non è possibile aggiungere campi aggiuntivi poiché non sono dichiarati nell'entità. Esiste una soluzione per aggirare il problema:

  • creare un modulo dinamico in cui è possibile aggiungere campi aggiuntivi.

avete un esempio di come funziona su github: https://github.com/Keirua/KeiruaProdCustomerDemoBundle

e il tutorial completo a questo indirizzo (ma in francese):

http://blog.keiruaprod.fr/2012/01/18/formulaires-dynamiques-avec-symfony2/

PS: Sembra Sonata usa in questo modo per aggiungere campi.

+0

I campi Hmm sono correlati all'entità da molti a molti. Ma voglio sulla lista solo gli elementi che sono collegati ad una categoria. – Pawel

+0

La relazione utilizzata è OneToMany poiché si crea un nuovo elemento che sarà collegato alla categoria. – Chopchop

1

Nel mio caso la soluzione è stata molto semplice, basta aggiungere allow_add al vostro campo di raccolta, seguito il mio esempio

 ->add('Details', 'collection', array(
      'type' => new DetailsType(), 
      'allow_add' => true, 
      'allow_delete' => true, 
      'label' => ' ' 
     )) 

è anche possibile controllare la documentazione ufficiale per questo problema http://symfony.com/doc/current/cookbook/form/form_collections.html

La prima cosa che devi fare è lasciare che la collezione di moduli sappia che riceverà un numero sconosciuto di tag. Finora hai aggiunto due tag e il tipo di modulo si aspetta di riceverne esattamente due, altrimenti verrà generato un errore: questo modulo non dovrebbe contenere campi aggiuntivi. Per renderlo flessibile, aggiungi l'opzione allow_add al tuo campo di raccolta.

+0

Questo funziona. Grazie. – TrtG