Доступ к переменной через $ options в buildForm () - PullRequest
9 голосов
/ 02 января 2012

Я хочу передать логическое значение моему 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 пошел ?

Спасибо.

Ответы [ 2 ]

24 голосов
/ 02 января 2012

Опции должны быть переданы методу createForm(), а не вашему конструктору DogForm:

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

Имейте в виду, что вы также должны добавить has_cats к getDefaultOptions()

11 голосов
/ 28 мая 2013

Я добавлю несколько рекомендаций для тех, кто прочтет это, потому что в то время, когда я задавал вопрос, OptionResolver был не так продвинут, как сейчас:

Вместо проверки наличия опции "has_cats" в конструкторе форм лучше сделать:

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

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

Таким образом, если вы пропустите параметр "has_cats", будет выдано сообщение об ошибке, поскольку вы отметили параметр как Обязательный.

Если вам нужна дополнительная информация, я бы посоветовал вам прочитать документацию по определителю параметров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...