用 symfony 形式编辑 json_array 字段

use*_*807 5 forms arrays json textarea symfony

为了编辑实体的 json_array symfony 字段类型,我试图将其转换为可编辑的字符串,其中包含表单中的文本区域。

我创建了一个 DataTransformer,它正在转换JSONString <-> 数组

/**
 * Transform an array to a JSON string
 */
public function transform($array)
{
    return json_encode($array);
}

/**
 * Transform a JSON string to an array
 */
public function reverseTransform($string)
{
    return json_decode($string, true);
}
Run Code Online (Sandbox Code Playgroud)

当我使用表单构建器创建表单时,我可以将数组转换为这样的字符串:

$builder->add($builder->create('info', 'textarea')->addModelTransformer(new ArrayToJSONStringTransformer()))
Run Code Online (Sandbox Code Playgroud)

但是当我提交表单时,Symfony 正在创建一个新实体,并且这个字段被转换为一个空数组。

我应该怎么做 ?

afi*_*ina 4

您输入到文本区域的文本可能不是有效的 JSON。尝试将文本复制到此工具中以验证语法: http://jsonlint.com/

我强烈建议您将一些验证集成到您的变压器中:

    public function reverseTransform($string)
    {
       $modelData = json_decode($string, true);
       if ($modelData == null) {
           throw new TransformationFailedException('String is not a valid JSON.');
       }

       return $modelData;
    }
Run Code Online (Sandbox Code Playgroud)

  • 更好的方法如下,因为您可以合法地传递 null。`if (json_last_error() != JSON_ERROR_NONE)` 另外,您还需要从函数返回 `$modelData`。 (2认同)