[英]How to validate doctrine type “json” with symfony json constraint in a form correctly?
所以,我想在表單中輸入一些 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”中給出的“array or null”、“string”類型的預期參數。
在“ PropertyAccessor ”
當我想作為一個數組返回時,我執行 json_decode,並得到一個不同的錯誤:
給定“字符串”、“數組”類型的預期參數
在“ JsonValidator ”。
我的懷疑是,PropertyAccessor 和 JsonValidator 都是串行的,並且都需要不同的類型。 我肯定錯過了什么。 有任何想法嗎? 提前致謝!
Doctrine 類型 JSON 確實需要一個數組: https://www.doctrine-project.org/projects10/doctrine-dbal/en#json/
如果您需要在代碼中使用 Array 並希望將該數據保存在數據庫中,這將非常有用。 數據在保存之前轉換為 JSON 字符串,並在檢索時返回到數組。
如果您的 PHP 代碼中不需要該數組,並且您的最終用戶以某種方式提交 JSON 需要驗證。 您可能應該將其保存為(長)文本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.