鍍金池/ 問答/PHP  網(wǎng)絡(luò)安全  HTML/ symfony的form組件——CollectionType參數(shù)傳遞

symfony的form組件——CollectionType參數(shù)傳遞

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->setMethod('post')
            ->add('question_list',CollectionType::class,[
                'entry_type' => FormType::class,
            ]);
    }

如上代碼,在當(dāng)前方法打印參數(shù)$options里面的選項(xiàng)有'data'字段,里面存儲(chǔ)了當(dāng)前實(shí)體數(shù)據(jù)。
問題是,在FormType::class中的buildForm方法參數(shù)$options選項(xiàng)中,并沒有$options['data']字段,這個(gè)值在FormType::class中該如何獲取呢?

上述問題,就可以解決當(dāng)前參數(shù)的疑問。

FormType::class 中有個(gè)answer_optional字段,數(shù)據(jù)格式是json,若是可以對該json數(shù)據(jù)進(jìn)行解析,在buildForm方法里可以對其數(shù)據(jù)進(jìn)行操作,也可解決該問題!

核心問題就一個(gè),如何獲取FormType::classbuildForm方法的$options['data']數(shù)據(jù)?
希望您能提供一個(gè)合理的方法,謝謝!

回答
編輯回答
憶往昔

你想定義一個(gè)options的key嗎?
還是怎么辦?

http://symfony.com/doc/curren...

補(bǔ)充:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $formBuilder = $builder->add('name', null, [
        'label' => '路由名稱'
    ]);
    if(1 == $options['is_new']){
         $formBuilder->add('status', ChoiceType::class, [
            'choices' => [
                '啟用' => 1,
                '禁用' => 0
            ],
            'expanded' => true,
            'label' => '狀態(tài)',
            'data' => 1,
            'label_attr' => [
                'class' => 'radio-inline'
            ]
        ])
            ->add('active', ChoiceType::class, [
            'choices' => [
                '顯示' => 1,
                '隱藏' => 0
            ],
            'expanded' => true,
            'label' => '是否顯示',
            'data' => 1,
            'label_attr' => [
                'class' => 'radio-inline'
            ]
        ]);
     }else{
         $formBuilder->add('status', ChoiceType::class, [
             'choices' => [
                 '啟用' => 1,
                 '禁用' => 0
             ],
             'expanded' => true,
             'label' => '狀態(tài)',
             'label_attr' => [
                 'class' => 'radio-inline'
             ]
         ])
         ->add('active', ChoiceType::class, [
             'choices' => [
                 '顯示' => 1,
                 '隱藏' => 0
             ],
             'expanded' => true,
             'label' => '是否顯示',
             'label_attr' => [
                 'class' => 'radio-inline'
             ]
         ]);
         
     }
}
     
/**
 * {@inheritdoc}
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'is_new' => 1
    ));
}

這時(shí),你可以在options里面拿到is_new的數(shù)據(jù),你再使用的時(shí)候,可以傳入?yún)?shù)

$form = $this->createForm('AdminBundle\Form\MenuType', $menu, ['is_new' => 1]);

你可以把你的json數(shù)據(jù)作為第三個(gè)參數(shù)傳進(jìn)來,然后,在處理你的邏輯。

2017年11月18日 16:46