在EasyAdmin 3中有没有一种表示JSON字段的方法?

hzbexzde  于 2023-10-21  发布在  其他
关注(0)|答案(2)|浏览(119)

我是新来的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更好的方法?在此先谢谢您!

798qvoo8

798qvoo81#

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

zte4gxcn

zte4gxcn2#

根据@myfluxi的评论:
为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)

相关问题