symfony的form组件——CollectionType参数传递

新手上路,请多包涵
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->setMethod('post')
            ->add('question_list',CollectionType::class,[
                'entry_type' => FormType::class,
            ]);
    }

如上代码,在当前方法打印参数$options里面的选项有'data'字段,里面存储了当前实体数据。
问题是,在FormType::class中的buildForm方法参数$options选项中,并没有$options['data']字段,这个值在FormType::class中该如何获取呢?

上述问题,就可以解决当前参数的疑问。

FormType::class 中有个answer_optional字段,数据格式是json,若是可以对该json数据进行解析,在buildForm方法里可以对其数据进行操作,也可解决该问题!

核心问题就一个,如何获取FormType::classbuildForm方法的$options['data']数据?
希望您能提供一个合理的方法,谢谢!

阅读 3.1k
1 个回答

你想定义一个options的key吗?
还是怎么办?

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

补充:

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' => '状态',
            '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' => '状态',
             '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
    ));
}

这时,你可以在options里面拿到is_new的数据,你再使用的时候,可以传入参数

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

你可以把你的json数据作为第三个参数传进来,然后,在处理你的逻辑。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题