0

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

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

实际上,ChoiceField 返回作者对象的 id。提交表单后,如何以时尚的方式将 id 转换为对象? 我目前正在为每个字段使用 DataTransformers 来解决这个问题。但这作为解决方案非常沉重。这意味着为每个字段创建 1 个 DataTransform 类。

该文档没有提供有关如何处理选择的任何线索: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;
    }
4

1 回答 1

0

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

于 2022-01-21T23:31:30.197 回答