2012-01-02 10 views
9

voglio passare un valore booleano al mio DogForm

$dogForm = new DogForm(null, array("has_cats" => $this->getUser()->hasCats())); 

$form = $this->createForm($dogForm, $dog); 

Ma quando si fa nel mio DogForm:

if (!isset($options['has_cats'])) { 
    throw new \Exception("Missing option has_cats, this option is mandatory");   
} 

E sempre mi danno questo errore

Quindi so che i cani non dovrebbero avere i gatti ma, dove la mia opzione has_cats andato?

Grazie.

risposta

24

opzioni dovrebbero essere passato al metodo createForm(), non al tuo DogForm costruttore:

$form = $this->createForm(new DogForm(), $dog, array('has_cats' => $cats)); 

Mente, che si deve aggiungere "has_cats" per getDefaultOptions() così

+8

Grazie Kris. Solo così altri sanno che se lo leggono, dovrai aggiungere "has_cats" anche a getDefaultOptions() nel CatForm. –

11

io aggiungo un po 'meglio pratica per coloro che leggeranno questo, perché nel momento in cui ho posto la domanda OptionResolver non era così avanzato come adesso:

Invece di verificare la presenza dell'opzione "has_cats" nel generatore di forma, è meglio fare:

public function setDefaultOptions(OptionResolverInterface $resolver) 
{ 
    $resolver->setRequired(array(
     'has_cats', 
    )); 

    $resolver->setDefaults(array(
     'has_cats' => null, 
    )); 
} 

questo modo, se si omette di passare le opzioni "has_cats", sarà generato un errore causa che ha segnato l'opzione come richiesto.

Se volete maggiori informazioni, suggerirei di read the option resolver documentation

+0

+1 per mantenere aggiornata la risposta di Kris. – flu

Problemi correlati