具有混合entry_type的CollectionType

时间:2019-09-23 13:07:59

标签: php arrays forms symfony arraycollection

在Symfony 3 / PHP 7中,我需要一个接受混合类型数组(字符串,整数和数组)的表单。 CollectionType的“ entry_type”参数仅接受唯一的Type。我怎样才能有混合类型?

$builder
     ->add('value', CollectionType::class, array(
         'entry_type' => ?,
         'allow_add' => true,
         'allow_delete' => true,
     ));

1 个答案:

答案 0 :(得分:0)

您可以使用嵌入表格。在您的自定义表单类型中,您可以定义多个输入字段,然后在CollectionType中使用它。

// src/Form/TagType.php
namespace App\Form;

use App\Entity\Tag;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class TagType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('string_field')
            ->add('int_field')
            ->add('whatever_field');
    }
}

像这样用作entry_type:

 use App\Form\TagType;

 // ...
 $builder
      ->add('multiple_fields_collection', CollectionType::class, [
          'entry_type' => TagType::class,
          'allow_add' => true,
          'allow_delete' => true,
      ]);

更多信息: https://symfony.com/doc/current/form/form_collections.html