2015-10-26 9 views
12

私のフォームのbuildFormメソッドにオプションを渡そうとすると、次のエラーが発生します。コントローラから組み込みsymfonyフォームへのオプションを渡したときにオプションが存在しないエラー

オプション「numOfHoles」は存在しません。定義されたオプションは、 "action"、 "allow_extra_fields"、 "attr"、 "auto_initialize"、 "block_reference"、 "cascade_validation"、 "compound"、 "constraints"、 "csrf_field_name"、 "csrf_message" 「csrf_provider」、「csrf_token_id」、「csrf_token_manager」、「data」、「data_class」、「disabled」、「empty_data」、「error_bubbling」、「error_mapping」、「extra_fields_message」、「inherit_data」、「intention」、 "invalid_message"、 "invalid_message_parameters"、 "label_attr"、 "label_format"、 "mapped"、 "max_length"、 "method"、 "pattern"、 "post_max_size_message"、 "property_path"、 "read_only" 「必要な」、「translation_domain」、「trim」、「validation_groups」、「virtual」です。 crmpicco_course Formクラスで

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

私のコントローラで

crmpicco_course_rowフォームクラスで

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

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がない理由誰もが見ることができますpスルーする?

+0

フォームビルダーの 'configureOptions(OptionsResolver $ resolver)'の中で 'setDefaults'または' setRequired'関数を使って 'numOfHoles'オプションを追加する必要があります。 –

答えて

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; 
} 
関連する問題