如何使用 EasyAdmin 在 ChoiceField 中列出实体?

How to list entities in a ChoiceField with EasyAdmin?

我正在尝试使用 EasyAdmin Bundle 在表单中设置选项。 下面是控制器内部的代码。

我收到此错误消息:Expected argument of type "App\Entity\Author or null", "int" given at property path "author".

确实是 ChoiceField returns 作者对象的 ID。 表单提交后如何将id时尚的转化为对象? 我目前正在为每个字段使用 DataTransformers 来解决这个问题。但这作为解决方案非常沉重。这意味着为每个字段创建 1 个 DataTransform class。

文档没有给出任何关于如何处理选择的线索:https://symfony.com/doc/3.x/EasyAdminBundle/fields.html

谢谢。

我在 Linux Mint 上使用 EasyAdmin 3 + Symfony 5。

在App\Admin\PostCrudController中:

    public function configureFields(string $pageName): iterable
    {
        return [
            // ...
            ChoiceField::new('author')->setChoices(fn() => $this->getAuthorChoices()),
        ];
    }

    private function getAuthorChoices(): array
    {
        $choices = [];
        foreach($this->authorRepository->findAll() as $i => $author) {
            $choices[$author->getFullName()] = $author->getId();
        }
        return $choices;
    }

实际上解决方案非常简单:使用 AssociationField 类型而不是 ChoiceField。 ChoiceField 类型仅用于手动传递数组。 要列出实体,AssociationField 绝对是一个并且自动完成所有事情。 由于尚未编写字段参考,因此文档中并未对此进行精确说明。