Symfony3 - collectionType

时间:2016-09-05 12:35:04

标签: symfony

我有一个包含4个未映射字段的表单。每个字段都可以包含[0,n]文件。

这是我的FormType(效果很好):

$builder            
        ->add('identityProofs', CollectionType::class, array(
           'entry_type' => FileType::class, 'allow_add' => true, 'prototype' => true, 'label' => false))
       ->add('articlesOfAssociations', CollectionType::class, array(              
           'entry_type' => FileType::class, 'allow_add' => true, 'prototype' => true, 'label' => false))
       ->add('registrationProofs', CollectionType::class, array(
           'entry_type' => FileType::class, 'allow_add' => true, 'prototype' => true, 'label' => false))
       ->add('shareolderDeclarations', CollectionType::class, array(
           'entry_type' => FileType::class, 'allow_add' => true, 'prototype' => true, 'label' => false))           
    ;

对于每个文件,我需要添加像maxSize这样的约束。我不能在不使用注释的情况下找到任何关于它的文档(我无法使用,因为我没有使用映射类)。我是否需要添加一个类,或者我可以做类似的事情(已经尝试过,它不起作用):

->add('articlesOfAssociations', CollectionType::class, array(
           'constraints'  => array(
               new Collection(
                   ['fields' => ['File' => new File(['maxSize' => '10k'])]])),

1 个答案:

答案 0 :(得分:1)

您需要将约束传递给内部表单类型(文件),而不是父级(集合)。

为此,您应该使用集合类型的entry_options选项。此选项的值将传递到条目表单类型的每个实例(在您的案例中为FileType)。所以它可能是这样的:

->add('articlesOfAssociations', CollectionType::class, array(
        'entry_options' => array(
           'constraints'  => array(
               new File(['maxSize' => '10k']),
           ),
        ),