簡體   English   中英

如何正確驗證 doctrine 類型“json”和 symfony json 約束?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM