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

发布于 2022-09-06 06:06:33 字数 822 浏览 15 评论 0

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']数据?
希望您能提供一个合理的方法,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

紫罗兰の梦幻 2022-09-13 06:06:33

你想定义一个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数据作为第三个参数传进来,然后,在处理你的逻辑。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文