2012-06-03 14 views
13

Sto lavorando a un backend symfony2 per un'applicazione backbone.js. Ho il mio modello e la mia forma.Convalida moduli symfony2 con campi aggiuntivi

Tuttavia, backbone.js invia alcune proprietà aggiuntive all'API REST durante la creazione/aggiornamento di un modello e non riesco a ottenere il convalida del modulo.

Come posso ottenere un modulo in symfony2 per accettare dati aggiuntivi o come posso rilasciare determinate chiavi prima di collegare i dati a un modulo?

risposta

12

Per ottenere Symfony2 accettare dati aggiuntivi, aggiungere i campi aggiuntivi per il vostro costruttore form e impostare la loro opzione a false property_path:

Esempio:

$builder 
    ->add('my_additional_field', 'checkbox', array(
     'mapped' => false, 
    )); 

Non è necessario far cadere le chiavi prima di legare i dati, saranno comunque ignorati.

+3

+1 nota rapida per> = 2.1: "Novità nella versione 2.1: dal 2.1 l'opzione mappata è stata aggiunta per questo caso d'uso." http://symfony.com/doc/2.1/reference/forms/types/hidden.html#mapped –

+0

Forse dovresti considerare di aggiornare la tua risposta aggiungendo per quale versione è valida. – xPheRe

+1

Non faccio più PHP. Per favore aggiorna la mia risposta se puoi. –

2

È possibile ascoltare FormEvents::BIND_CLIENT_DATA (o FormEvents::PRE_BIND se si utilizza 2.1 dev) listener di eventi e aggiungere/rimuovere campi. Vedere la voce di ricette this.

16

property_path è ormai deprecato in sf 2.1, usare "mappato" invece

$builder 
    ->add("firstName", "text") 
    ->add("lastName", "text") 
    ->add("tac", "checkbox", array(
     "mapped" => false 
    ) 
); 
46

Si dovrebbe utilizzare l'opzione "allow_extra_fields".

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
     $resolver->setDefaults(
     array(
      'allow_extra_fields' => true 
     ) 
    ); 
} 
+2

allow_extra_fields non sarà incluso in symfony fino alla 2.6. Questo sarà il modo giusto per aggiungere campi extra. mapped = false sarebbe il modo consigliato se si conoscono i nomi di campo aggiuntivi che verranno inviati. – Heyflynn

+1

Poiché 2.6 è stato contrassegnato come versione stabile, questa deve essere contrassegnata come risposta corretta. @ user1432227 – Chausser

+0

@krun si potrebbe anche aggiungere l'esempio di symfony 2.8/3. * dove si trova: 'configureOptions (OptionsResolver $ resolver)' invece della funzione setDefaultOptions. –

Problemi correlati