我想将布尔值传递给我的DogForm
$dogForm = new DogForm(null, array("has_cats" => $this->getUser()->hasCats()));
$form = $this->createForm($dogForm, $dog);
但是在我的DogForm
中做的时候:
if (!isset($options['has_cats'])) {
throw new \Exception("Missing option has_cats, this option is mandatory");
}
它总是给我这个错误。
所以我知道狗不应该有猫但是我的has_cats
选项去了哪里?
感谢。
答案 0 :(得分:24)
选项应该传递给createForm()
方法,而不是传递给DogForm
构造函数:
$form = $this->createForm(new DogForm(), $dog, array('has_cats' => $cats));
请注意,您必须将“has_cats”添加到getDefaultOptions()
以及
答案 1 :(得分: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