2012-01-02 121 views
9

我想一个布尔值传递给我的DogForm 访问通过

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

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

在buildForm($选项)一个变量,但在我的DogForm做时:

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

它总是给我这个错误。

所以我知道狗不应该有猫,但是,我的has_cats选项去

谢谢。

回答

24

选项应该传递给createForm()方法,而不是你的DogForm构造:

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

记住,你要“has_cats”添加到getDefaultOptions()以及

+8

谢谢克里斯。如果其他人知道他们是否阅读过这些内容,则必须在CatForm中的getDefaultOptions()中添加“has_cats”。 – 2012-01-02 15:32:12

11

我会添加一些最好的对于那些会阅读此内容的人来说,因为当我问这个问题的时候,OptionResolver并没有像现在这样先进:

而不是检查是否存在选项"has_cats"在表单生成器,这是更好地做:

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

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

如果省略传递"has_cats"选择这种方式,因为你标记选项如有需要,它会抛出一个错误。

如果你想了解更多的信息,我建议你read the option resolver documentation

+0

+1保持克里斯的答案是最新的。 – flu 2013-08-12 09:08:50