选项的集合类型无法通过验证

时间:2019-08-25 22:48:04

标签: symfony4

我创建了一个具有选择集合类型的表单。


$builder->add('roles', CollectionType::class, [
                'entry_type'    => ChoiceType::class,
                'entry_options' => [
                    'choices'  => ['Admin' => 'ROLE_ADMIN', 'User' => 'ROLE_USER'],
                    'label'    => false,
                ],
            ])

角色字段在用户实体中定义如下:

/**
* @ORM\Column(type="json")
*/
private $roles = [];

然后在用户的实体类中添加以下方法:

public static function loadValidatorMetadata(ClassMetadata $metadata) {
$metadata->addPropertyConstraint('roles', new Assert\Choice(['ROLE_ADMIN', 'ROLE_USER']));
}

每次尝试提交表单时,都会收到验证错误:“您选择的值不是有效选择。”

screenshot of my form

在所有字段上方显示错误消息是什么奇怪的现象,这意味着该错误与任何可用字段都不相关。

具有角色的选择的名称是user[roles][0],它是自动创建的。 如果我关闭验证,则所有数据都会正确保存到数据库。

1 个答案:

答案 0 :(得分:0)

Assert \ Choice希望字段“ role”的值是标量类型,但角色是集合。要使用Assert \ Choice验证收集,您需要执行此操作

public DateTime? DateOfBirth { get; set; }