在 EasyAdmin 3 中配置 AssociationField default 属性
Configuring AssociationField deafault property in EasyAdmin3
我有一个问题 - 是否可以将 AssociationField 配置为与特定 属性 一起工作。即:
我有一个与用户具有多对一关系的订阅实体,用户有一个 __toString() 方法,那个 returns 用户名,它在整个应用程序中使用,所以我无法改变它。在 'create Subscription' 表单中,我有 AssociationField::new('user'),我可以通过他的名字找到用户。
但这很不方便,因为当我需要创建订阅时,会弹出许多同名用户。相反,我希望能够通过 ID 或电子邮件搜索用户。
有没有办法覆盖默认行为?
您的 AssociationField
是使用 Symfony EntityType 制作的。如果您查看此字段使用的表单类型。
//AssociationField.php
public static function new(string $propertyName, $label = null): self
{
return (new self())
//...
->setFormType(EntityType::class)
//...
这意味着您可以使用其中的所有选项。 See more here.
对于您的情况,通过定义另一个 属性 或回调来修改标签非常容易。
然后可以使用->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');
我有一个问题 - 是否可以将 AssociationField 配置为与特定 属性 一起工作。即:
我有一个与用户具有多对一关系的订阅实体,用户有一个 __toString() 方法,那个 returns 用户名,它在整个应用程序中使用,所以我无法改变它。在 'create Subscription' 表单中,我有 AssociationField::new('user'),我可以通过他的名字找到用户。
但这很不方便,因为当我需要创建订阅时,会弹出许多同名用户。相反,我希望能够通过 ID 或电子邮件搜索用户。
有没有办法覆盖默认行为?
您的 AssociationField
是使用 Symfony EntityType 制作的。如果您查看此字段使用的表单类型。
//AssociationField.php
public static function new(string $propertyName, $label = null): self
{
return (new self())
//...
->setFormType(EntityType::class)
//...
这意味着您可以使用其中的所有选项。 See more here.
对于您的情况,通过定义另一个 属性 或回调来修改标签非常容易。
然后可以使用->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');