2012-01-02 8 views
9

Quiero pasar un booleano a mi DogForm

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

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

Pero cuando se hace en mi DogForm:

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

Siempre dame este error.

Así que sé que se supone que los perros no tienen gatos pero, donde mi opción has_cats fue?

Gracias.

Respuesta

24

opciones deben ser pasado al método createForm(), no a su DogForm constructor:

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

mente, que hay que añadir "has_cats" a getDefaultOptions() así

+8

Gracias Kris. Para que otros sepan si leyeron eso, también tendrán que agregar los "has_cats" en getDefaultOptions() también en CatForm. –

11

voy a añadir algunas de las mejores práctica para aquellos que leerán esto, porque en el momento en que hice la pregunta, el OptionResolver no estaba tan avanzado como ahora:

En lugar de verificar la presencia de la opción "has_cats" en el constructor de la forma, es mejor que hacer:

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

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

De esta manera si se omite para pasar los "has_cats" opciones, que va a lanzar un error causa que haya marcado la opción según sea necesario.

Si desea más información, te gustaría sugerir a read the option resolver documentation

+0

+1 Para mantener la respuesta de Kris actualizada. – flu

Cuestiones relacionadas