如何在Symfony EasyAdmin 4中使用关联字段

3

当我使用:

public function configureFields(string $pageName): iterable
    {
      return [
            AssociationField::new('XYZ')
        ];
    }`

我收到了错误信息"Object of class App\Entity\XYZ could not be converted to string"

当我在AssociationField::new('XYZ')中添加->autocomplete()时,它可以工作,但在保存时显示错误"Expected argument of type "?string", "App\Entity\XYZ" given at property path "XYZ".

使用多对一关系的这个字段的正确方法是什么?Symfony Easy Admin文档 https://symfony.com/doc/current/EasyAdminBundle/fields/AssociationField.html没有提供有效的帮助。


另外,我如何显示选项的详细信息(例如id、名称等)?现在它显示为Position#1、Position#2等,这并不代表其中的内容。 - Tim
1个回答

6
你的实体App\Entity\XYZ将会在关联字段中以字符串形式呈现(这是标准 Symfony 实体类型)。否则,在实体选择器中就无法设置标签。
它将尝试使用 __toString 方法进行转换,因此您需要在实体中添加该方法。
例如:
/**
 * @ORM\Entity(repositoryClass=XyzRepository::class)
 */
class Xyz
{
  public function __toString(){
    return $this->name; //or anything else
  }

EasyAdmin应该能够猜测实体类,因此您无需像简单的EntityType一样指定它。

你是一个巫师。非常感谢!这应该作为该领域的基本解释出现在官方文档中... - Tim
还有一个问题:如果该字段不存在,我可以添加一个添加新记录的功能吗? - Tim
你可以创建自己的字段来处理这种情况,但是你不能通过配置关联字段来实现。关联字段基本上只是一个带有可选自动完成选项的实体选择器(多个或不多个)。 - Dylan KAS
明白了。我该如何启用多选?现在它只允许选择一个位置。 - Tim
如果您查看AssociationField,您可以看到它使用setFormType(EntityType::class),这意味着您的字段只是一个EntityType,然后您可以查看Symfony文档以获取此类型并查看每个可用选项。在您的情况下,您可以找到multiple:https://symfony.com/doc/current/reference/forms/types/entity.html#multiple但是,仅当您的属性允许多个值(ManyToMany,OneToMany)时才有效。 - Dylan KAS
然后您需要使用 setFormTypeOptionAssociationField::new('XYZ')->setFormTypeOption('multiple', true); - Dylan KAS

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