提问人:Shyam Singh 提问时间:12/21/2022 更新时间:12/21/2022 访问量:88
如何在Symfony OptionsResolver组件中使用对象数组?
How to use array of objects with the Symfony OptionsResolver Component?
问:
我有以下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子项,但它没有按预期工作。
答: 暂无答案
评论