Symfony验证 - 只是数组的一部分

时间:2017-11-28 14:57:21

标签: php arrays symfony validation

我需要symfony验证器的帮助。有可能只验证数组中的特定值吗?例如,我有数组:

'0' => [
    'interestidKey' => true,
    'anotherInterestedKey' => 'foo'
],
'error' => [
    'errorMsg => 'not interest for me'
]

我需要使用验证程序验证此数组,主要是值0。我需要知道数组是否包含'0'键,如果是带有布尔值的键interestidKey则需要内部。我总是使用Collection for array,但在这种情况下它不起作用,因为ofc向我显示error不包含interestidKey的错误。

我该如何解决这个问题?

2 个答案:

答案 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);
    }
}