我需要symfony验证器的帮助。有可能只验证数组中的特定值吗?例如,我有数组:
'0' => [
'interestidKey' => true,
'anotherInterestedKey' => 'foo'
],
'error' => [
'errorMsg => 'not interest for me'
]
我需要使用验证程序验证此数组,主要是值0
。我需要知道数组是否包含'0'键,如果是带有布尔值的键interestidKey
则需要内部。我总是使用Collection for array,但在这种情况下它不起作用,因为ofc向我显示error
不包含interestidKey
的错误。
我该如何解决这个问题?
答案 0 :(得分:0)
我不确定您是否能够通过开箱即用的限制来做您想做的事情。但是你应该能够通过编写自己想要的东西来做你想做的事:https://symfony.com/doc/current/validation/custom_constraint.html看看它,看看它是否可以帮助你。
如果您确认可以这样做:
if(array_key_exists(0, $array)) {
if(array_key_exists("interestid", $array[0])) {
return true;
}
} else {
// do the error stuffs
}
答案 1 :(得分:0)
您可以在数组上构建一个循环,检查密钥,如果它是数字键(或不是错误键),则将验证应用于子代。这看起来像这样:
use Symfony\Component\Validator\Constraints as Assert;
...
$constraint = new Assert\Collection([
'fields' => [
// put any constraints for your objects here, keyed by field name
'interestidKey' => new Assert\Type('bool')
],
'allowExtraFields' => true // remove if you don't want to allow other fields than specified above
]);
$violations = [];
foreach($data as $key => $item) {
if ($key != 'error') {
$violations[$key] = $validator->validate($item, $constraint);
}
}