我有一個問題 - 這里是否可以配置 AssociationField 以使用特定屬性。IE:
我有一個與用戶多對一關系的訂閱物體,用戶有一個 __toString() 方法,它回傳用戶名,它在整個應用程式中使用,所以我無法更改它。在“創建訂閱”表單中,我有 AssociationField::new('user'),在這里我可以通過他的名字找到用戶。
但這很不方便,因為當我需要創建訂閱時,會彈出許多同名的用戶。相反,我希望能夠通過 ID 或電子郵件搜索用戶。
有沒有辦法覆寫默認行為?
uj5u.com熱心網友回復:
您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');
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/438380.html
