gpt4 book ai didi

php - 如何验证数组的元素是否是数组本身?

转载 作者:可可西里 更新时间:2023-11-01 12:35:28 25 4
gpt4 key购买 nike

鉴于此输入:

[
'key' => 'value',
]

如何验证以确保:

  1. key 属性存在
  2. 它的值是一个数组(有任意数量的元素)

我希望这个约束起作用

    $constraint = new Collection([
'key' => new Required([
new Type('array'),
new Collection([
'value' => new Required([
new NotBlank(),
]),
]),
]),
]);

但是它抛出一个异常:

Symfony\Component\Validator\Exception\UnexpectedTypeException: Expected argument  of type "array or Traversable and ArrayAccess", "string" given

我错过了什么?

PS: 这是symfony v2.7.1

PPS:澄清一下:我知道可以使用回调。如果我想从头开始手动重新实现验证——我一开始就不会使用 symfony。所以问题特别是关于组合现有约束,而不是关于使用回调约束..

最佳答案

两天前我遇到了完全相同的问题

最后的结论是 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
}

希望这对您有所帮助。就我个人而言,我觉得我们需要这样做很烦人。 validator 服务中的某种“快速失败”标志会很有帮助。

关于php - 如何验证数组的元素是否是数组本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31018218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com