如何使用 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 绝对是一个并且自动完成所有事情。
由于尚未编写字段参考,因此文档中并未对此进行精确说明。
我正在尝试使用 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 绝对是一个并且自动完成所有事情。 由于尚未编写字段参考,因此文档中并未对此进行精确说明。