Опция не существует ошибка при передаче через опцию из контроллера в встроенную форму Symfony

Я получаю следующую ошибку при попытке передать опцию моему методу buildForm в одной из моих форм.

Опция "numOfHoles" не существует. Определенные параметры: "действие", "allow_extra_fields", "attr", "auto_initialize", "block_name", "by_reference", "cascade_validation", "составные", "ограничения", "csrf_field_name", "csrf_message", "csrf_protection" "csrf_provider", "csrf_token_id", "csrf_token_manager", "data", "data_class", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "намерение", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "max_length", "method", "pattern", "post_max_size_message", "property_path", "read_only", "required "," translation_domain "," trim "," validation_groups "," virtual ".

В моем контроллере:

// hardcoded here for brevity in this example
$form = $this->createForm('crmpicco_course_row', $courseRow, array('numOfHoles' => 18));

В crmpicco_course_row Класс формы:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name', 'text')
        ->add('course', 'crmpicco_course', array('numOfHoles' => $options['numOfHoles']))
    ;
}

В crmpicco_course Класс формы:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    for ($i = 0; $i < $options['numOfHoles']; $i++) {
        $builder->add($i, 'text', array('required' => 'false'));
    }
}

/**
 * @return string name
 */
public function getName()
{
    return 'crmpicco_course';
}

Может ли кто-нибудь понять, почему опция numOfHoles не тянет?

Ответы

Ответ 1

Как вы обнаружили, каждый тип формы имеет предопределенный список параметров. Добавление новой опции требует небольшой корректировки. Фактический метод изменился в ходе разработки Symfony, поэтому вы можете столкнуться с некоторыми более старыми обесценившимися решениями.

Самое современное решение обсуждается здесь: http://symfony.com/blog/new-in-symfony-2-7-form-and-validator-updates#deprecated-setdefaultoptions-in-favor-of-configureoptions

Так что в основном добавьте

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Whatever',
        'numOfHoles' => 0,
    ));

К вашим типам форм, и вам должно быть хорошо идти.

Ответ 2

Попробуйте сделать это:

$numOfHoles = array('numOfHoles' => $options['numOfHoles']));

тогда:

$oForm = $this->createForm(new CompanyForm($numOfHoles));

Затем вам нужно вызвать его перед вашим buildForm:

public function __construct($contacts))
{
$this->vnumOfHoles = $numOfHoles;
}