在EasyAdmin 3中是否有表示JSON字段的方法?

3

我是Symfony的新手,还在学习中。我目前正在开发一个Symfony应用程序,其中有一个表格代表项目,每个项目都有idtitlestartDateendDatefields,其中fields是一个JSON字段,包含表示不同列的数据,这些列是项目自定义的,并且可以由用户添加、更新或删除。

该字段内的数据如下:

{
  "columns": {
    "column1": "string",
    "column2": "integer"
  },
  "rows": [
    {
      "column1": "foo",
      "column2": 22
    },
    {
      "column1": "bar",
      "column2": 23
    }
  ]
}

"columns" 表示特定项目中添加的自定义列,"rows" 表示每个列中的数据。 "string""integer" 表示每个列中的数据类型。

我的问题:

我可以使用 DoctrineJsonFunctions 提取列和值,并且我正在使用 EasyAdmin 3,但是我的问题是,当查看项目详细信息时如何读取项目列,知道每个项目可能会有不同的列?或者是否有比使用 JSON 字段更好的解决方案?先感谢您!

2个回答

1
根据@myfluxi的评论,基于this,创建一个新的Json表单类型的类:
namespace App\Form;

use EasyCorp\Bundle\EasyAdminBundle\Form\Type\CodeEditorType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\FormBuilderInterface;

class JsonCodeEditorType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        parent::buildForm($builder, $options);

        $builder
            ->addModelTransformer(new CallbackTransformer(
                static fn ($object) => json_encode($object, \JSON_THROW_ON_ERROR | \JSON_PRETTY_PRINT),
                static fn ($json) => json_decode($json, true, 512, \JSON_THROW_ON_ERROR)
            ));
    }

    public function getParent(): string
    {
        return CodeEditorType::class;
    }
}

在您的CRUD控制器的configureFields方法中:
yield CodeEditorField::new('result')
    ->setFormType(JsonCodeEditorType::class)
           

0
在easyadmin 3中,您可以使用ArrayField来显示JSON数据。

1
ArrayField不是关联数组,无法处理嵌套。 - Giso Stallenberg
Doctrine类型和现有字段类型之间的映射可以在https://symfony.com/bundles/EasyAdminBundle/current/fields.html#mapping-between-doctrine-types-and-easyadmin-fields找到。 - Giso Stallenberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接