0

我有一个问题 - 这里是否可以配置 AssociationField 以使用特定属性。IE:

我有一个与用户多对一关系的订阅实体,用户有一个 __toString() 方法,它返回用户名,它在整个应用程序中使用,所以我无法更改它。在“创建订阅”表单中,我有 AssociationField::new('user'),在这里我可以通过他的名字找到用户。

但这很不方便,因为当我需要创建订阅时,会弹出许多同名的用户。相反,我希望能够通过 ID 或电子邮件搜索用户。

有没有办法覆盖默认行为?

4

1 回答 1

0

AssociationField是使用 Symfony EntityType制作的。如果您查看此字段使用的表单类型。

//AssociationField.php
public static function new(string $propertyName, $label = null): self
{
    return (new self())
    //...
        ->setFormType(EntityType::class)
    //...

这意味着您可以使用其中的每个选项。在这里查看更多

在您的情况下,通过定义另一个属性或回调来修改您的标签非常容易。

然后您可以使用->setFormTypeOption()修改实体类型选项。

所以如果你想使用回调函数来定义自定义标签:

AssociationField::new('user')
    ->setFormTypeOption('choice_label', function ($user) {
        return $user->getEmail();
    });

或使用 php 7.4 箭头函数:

AssociationField::new('user')
    ->setFormTypeOption('choice_label', fn($user) => $user->getEmail());

您还可以将电子邮件属性定义为标签:

AssociationField::new('user')
    ->setFormTypeOption('choice_label', 'email');
于 2022-03-03T14:45:39.580 回答