鉴于此输入:
background-size: 100% auto;
如何验证以确保:
[
'key' => 'value',
]
属性存在我希望这个约束能够起作用
key
但它引发了一个例外:
$constraint = new Collection([
'key' => new Required([
new Type('array'),
new Collection([
'value' => new Required([
new NotBlank(),
]),
]),
]),
]);
我错过了什么?
PS:它的symfony v2.7.1
PPS:只是为了澄清:我知道可以使用回调。如果我想从头开始手动重新实现验证 - 我不会在最初使用symfony。所以问题特别是关于组合现有约束而不是关于使用回调约束。
答案 0 :(得分:4)
两天前我遇到了完全相同的问题。
最后的结论是Symfony2
验证没有"快速失败"验证。也就是说,即使您的Type()
约束失败,它也会继续使用其他约束,因此会因UnexpectedTypeException
异常而失败。
然而,我能够找到解决这个问题的方法:
$constraint = new Collection([
'key' => new Required([
new Type(['type' => 'array']),
new Collection([
// Need to wrap fields into this
// in order to provide "groups"
'fields' => [
'value' => new Required([
new NotBlank(),
]),
],
'groups' => 'phase2' // <-- THIS IS CRITICAL
]),
]),
]);
// In your controller, service, etc...
$V = $this->get('validator');
// Checks everything by `Collection` marked with special group
$violations = $V->validate($data, $constraint);
if ( $violations->count()){
// Do something
}
// Checks *only* "phase2" group constraints
$violations = $V->validate($data, $constraint, 'phase2');
if ( $violations->count()){
// Do something
}
希望这有点帮助。就个人而言,我觉得很烦人,我们需要这样做。某种&#34;快速失败&#34; validator
服务中的标志会非常有用。
答案 1 :(得分:2)
您说Collection
约束应该失败而不是抛出异常,因为'value'
是string
而不是array
。
最近记录的Symfony错误:https://github.com/symfony/symfony/issues/14943
答案 2 :(得分:1)