如何在Symfony OptionsResolver组件中使用对象数组?

How to use array of objects with the Symfony OptionsResolver Component?

提问人:Shyam Singh 提问时间:12/21/2022 更新时间:12/21/2022 访问量:88

问:

我有以下JSON请求结构,我想用Symfony OptionsResolver和Validator组件进行验证:

{
  "rules": [
    {
      "rule_code": {
        "code": "",
        "message": ""
      }
    },
    {
      "rule_code": {
        "code": "",
        "message": ""
      }
    }
  ]
}

但是每当我尝试使用此结构时,我都会收到以下错误:

"The options \"0\", \"1\" do not exist. Defined options are: \"rule_code\"."

有人可以提供任何可能的解决方案来解决对象数组的此问题吗?

我尝试将 setAllowedTypes 用于规则作为 array[],并且 CreateTicketParams 类的 configureParameters 如下:

protected function configureParameters(OptionsResolver $resolver)
{
    $resolver
        ->setRequired('rules')
        ->setAllowedTypes('rules', 'array[]')
        ->setAllowedValues('rules', $this->validatorFactory->createClosureForIterator([
            new Assert\NotBlank(),
        ]))
    ->setNormalizer('rules', function (Options $options, $values) {
            $rulesParams = new CreateTicketRulesParams($this->validatorFactory, $this->beanManager);
        $rulesParams->configure($values);
            return $rulesParams;
        });
}

configureParameters 的 CreateTicketRulesParams 类:

protected function configureParameters(OptionsResolver $resolver)
{
    $resolver
        ->setDefined('rule_code')
        ->setAllowedTypes('rule_code', 'array')
        ->setAllowedValues('rule_code', $this->validatorFactory->createClosure([
            new Assert\NotBlank(),
        ]));
}

由于我已经在 setAllowedTypes 中为规则指定了 array[],我希望它遍历规则数组并检查是否存在rule_code子项,但它没有按预期工作。

php json symfony 验证

评论


答: 暂无答案