如何在Easy Admin Bundle中的字段中编辑json数据?

Ant*_*nik 5 forms json symfony symfony2-easyadmin

我有这样的数据表:

在此输入图像描述

我想以一些用户友好的形式编辑json数据,不是这样的:

在此输入图像描述

它可以快速完成,只是为了改变一些参数?

Bon*_*olf 6

如果编辑漂亮的打印JSON足以满足您的需求,那么创建自定义表单字段和数据转换器,将JSON格式化为漂亮的打印表单以进行模板视图,并在提交表单时返回到紧凑的JSON.下面显示的解决方案基于Symfony 4的目录结构和系统.

JSON表单字段类型:

<?php
namespace App\Form\Type;

use App\Form\DataTransformer\JsonToPrettyJsonTransformer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;

class JsonType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);
        $builder->addViewTransformer(new JsonToPrettyJsonTransformer());
    }

    public function getParent()
    {
        return TextareaType::class;
    }
}
Run Code Online (Sandbox Code Playgroud)

数据转换器:

<?php
namespace App\Form\DataTransformer;

use Symfony\Component\Form\DataTransformerInterface;

class JsonToPrettyJsonTransformer implements DataTransformerInterface
{
    public function transform($value)
    {
        return json_encode(json_decode($value), JSON_PRETTY_PRINT);
    }

    public function reverseTransform($value)
    {
        return json_encode(json_decode($value));
    }
}
Run Code Online (Sandbox Code Playgroud)

轻松管理配置:

easy_admin:
    entities:
        EntityName:
            class: App\Entity\EntityName
            form:
                fields:
                    # other fields
                    - { property: 'propertyName', type: 'App\Form\Type\JsonType' }
Run Code Online (Sandbox Code Playgroud)

可以以相同的方式创建更复杂的编辑器,但可能覆盖小部件模板和自定义样式以及javascripts.

  • 非常好,除了,如果您的类型实际上在学说映射中标记为 json,则不必在任一转换方法中使用 `json_encode(json_decode(` )。只需在 `transform` 方法中使用 `json_encode` 并在 `json_decode` 中使用 `json_encode` `reverseTransform` 方法。 (2认同)