2012-01-02 162 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