【发布时间】:2020-08-26 10:41:08
【问题描述】:
所以,我想在表单中输入一些 json,以便通过 symfonys json 约束对其进行验证:
/**
* @Assert\Json(
* message = "variantJson field: invalid Json."
* )
* @ORM\Column(type="json", nullable=true)
*/
private $variantJson = [];
表格看起来有点像这样:
$builder
...
->add('variantJson', null, ['attr' => $style])
->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
...
}
})
;
$builder->get('variantJson')
->addModelTransformer(new CallbackTransformer(
function ($jsonToString) {
// transform the array to a string
return json_encode($jsonToString);
},
function ($stringToJson) {
// transform the string back to an array
dump(json_decode($stringToJson, true));
dump(json_last_error());
//1
return $stringToJson;
//2
return json_decode($stringToJson, true);
}
))
;
主要问题是,当我尝试只在 ModelTransformer 中返回 json 字符串时,我得到了这个异常:
在属性中给出的“数组或空”、“字符串”类型的预期参数 路径“variantJson”。
在“PropertyAccessor”
当我想以数组的形式返回时,我执行 json_decode,得到一个不同的错误:
给定“字符串”、“数组”类型的预期参数
在“JsonValidator”处。
我的怀疑是,PropertyAccessor 和 JsonValidator 都是串行的,并且都需要不同的类型。 我肯定错过了什么。有任何想法吗?提前致谢!
【问题讨论】: