2015-10-26 4 views
12

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

Опция «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», требуется "," 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 не п убирать?

+0

Вы должны добавить опцию 'numOfHoles', используя функцию' setDefaults' или 'setRequired' внутри' configureOptions (OptionsResolver $ resolver) 'вашего построителя форм. –

ответ

16

Как вы обнаружили, каждый тип формы имеет предопределенный список опций. Добавление новой опции требует небольшой корректировки. Фактический метод изменился в ходе разработки 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, 
    )); 

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

-1

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

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

затем:

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^