当前位置:  开发笔记 > 编程语言 > 正文

如何在没有任何自定义Form Type类的情况下创建多个字段的集合?

如何解决《如何在没有任何自定义FormType类的情况下创建多个字段的集合?》经验,为你挑选了1个好方法。

我有很多要创建的集合,并且不想为每个entry_type创建FormType,因为它们只使用一次.

因此entry_type,我没有在选项中提供表单类型FQCN ,而是尝试Type直接从表单生成器中添加一个新的:

$type = $this
   ->get('form.factory')
   ->createBuilder(Type\FormType::class)
   ->add('label', Type\TextType::class, [
       'label' => 'Key',
   ])
   ->add('value', Type\TextType::class, [
       'label' => 'Value',
   ])
   ->getType()
;

$form = $this
   ->get('form.factory')
   ->createBuilder(Type\FormType::class)
   ->add('hash', Type\CollectionType::class, [
       'entry_type'    => $type,
       'entry_options' => [],
       'allow_add'     => true,
       'allow_delete'  => true,
       'prototype'     => true,
       'required'      => false,
       'delete_empty'  => true,
   ])
   ->getForm()
;

但由于某些原因,原型无效:

我手动创建的所有子字段$type都丢失了.我的错误在哪里?



1> Alain Tiembl..:

我终于找到了答案.

正如->getType()我所使用的是在FormBuilder课堂上,而不是在课堂上FormBuilderInterface,我认为使用它是个坏主意.此外,FormType返回的实例是空的(表单类型,但没有子项).

所以我改变了我的立场并创建了下面的EntryType类(是的,我使用的是Form Type类,但是对于我以后的所有集合只使用了一个类):

add($field['name'], $field['type'], $field['options']);
        }
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'fields' => [],
        ]);
    }
}

我现在可以使用此fields选项在我的集合中使用任意字段:

use Symfony\Component\Form\Extension\Core\Type;
use AppBundle\Form\Type\EntryType;

// ...

$form = $this
   ->get('form.factory')
   ->createBuilder(Type\FormType::class)
   ->add('hash', Type\CollectionType::class, [
       'entry_type'    => EntryType::class,
       'entry_options' => [
           'fields' => [
               [
                   'name'    => 'key',
                   'type'    => Type\TextType::class,
                   'options' => [
                       'label' => 'Key',
                   ],
               ], [
                   'name'    => 'value',
                   'type'    => Type\TextType::class,
                   'options' => [
                       'label' => 'Value',
                   ],
               ],
           ],
       ],
       'allow_add'    => true,
       'allow_delete' => true,
       'prototype'    => true,
       'required'     => false,
       'delete_empty' => true,
   ])
   ->getForm()
;

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有