提问人:Danylo Koniushenko 提问时间:1/16/2023 更新时间:1/16/2023 访问量:308
Symfony 嵌套约束无法正常工作
Symfony nested constraints don't work properly
问:
我在 Symfony 验证中遇到了一个奇怪的问题。 似乎“嵌套”约束无法正常工作。
例如,我创建了一个需要验证$data字符串变量。
$data = 'string';
$constraint = new Assert\Type('integer');
$violations = $validator->validate($data, $constraint);
self::assertTrue($violations->count() > 0);
在这种情况下,它可以正常工作。我们将字符串变量传递给只允许整数的约束。但是,如果我创建“嵌套”约束,测试将无法通过。
$data = 'string';
$constraint = new Assert\Required([
new Assert\Type('integer'),
]);
$violations = $validator->validate($data, $constraint);
self::assertTrue($violations->count() > 0);
在这种情况下,测试失败。验证者未发现任何违规行为。
是错误吗?还是我做错了什么?
答:
1赞
Adrien G
1/16/2023
#1
如果您希望您的数据不为空(必填)并且是一个数字:
$data = 'string';
$validator = Validation::createValidator();
$violations = $validator->validate($data, [
new NotBlank(),
new Type(['integer'),
]);
查看 https://symfony.com/doc/current/components/validator.html
1赞
Jonathan
1/16/2023
#2
没有约束。Assert\Required
从 Symfony 5.4 开始,您可以使用 Attributes 来组合约束:
#[Assert\All([
new Assert\NotNull(),
new Assert\Range(min: 3),
])]
或
#[Assert\Collection(
fields: [
'foo' => [
new Assert\NotNull(),
new Assert\Range(min: 3),
],
'bar' => new Assert\Range(min: 5),
'baz' => new Assert\Required([new Assert\Email()]),
]
)]
https://symfony.com/blog/new-in-symfony-5-4-nested-validation-attributes
评论
0赞
Adrien G
1/16/2023
我认为这些约束适用于基于文档的数组(或可遍历对象)。
评论
Assert\Required