У меня есть учетная запись сущности с двумя полями first_name и Last_name, я создал форму с компонентом Symfony. Я хотел бы иметь возможность получить имя и фамилию и объединить их в choice_label.
->add('user', EntityType::class, [
'attr' => [
'class' => 'form-select'
],
'label' => "user",
'label_attr' => [
'class' => 'form-label mt-4'
],
'class' => Account::class,
'choice_label' => 'first_name last_name', // HERE
])
Я пытался создать метод в своей учетной записи, но не могу его вызвать.
Спасибо за помощь.




см. https://symfony.com/doc/current/reference/forms/types/entity.html#choice-label
->add('user', EntityType::class, [
'attr' => [
'class' => 'form-select'
],
'label' => "user",
'label_attr' => [
'class' => 'form-label mt-4'
],
'class' => Account::class,
'choice_label' => function (EntityClass $entity): string {
return sprintf("%s %s", $entity->getFirstName(), $entity->getLastName());
},
])
Вы также можете создать метод getFullName() в вашей учетной записи.
public function getFullName(){
return $this->firstName.' '.$this->lastName;
}
И затем в вашей форме вы можете использовать опцию choice_label следующим образом:
->add('user', EntityType::class, [
'attr' => [
'class' => 'form-select'
],
'label' => "user",
'label_attr' => [
'class' => 'form-label mt-4'
],
'class' => Account::class,
'choice_label' => 'fullName', // HERE
])
Вы можете создать частную функцию следующим образом:
private function getFullName(){
return $this->firstName.' '.$this->lastName;
}
и вызовите его внутри:
->add('user', EntityType::class, [
'attr' => [
'class' => 'form-select'],
'label' => "user",
'label_attr' => [
'class' => 'form-label mt-4'
],
'class' => Account::class,
'choice_label' => $this->getFullName(), // HERE
])
передайте функцию обратного вызова для большего контроля.
$builder->add('user', EntityType::class, [
'class' => Account::class,
'choice_label' => function (Account $account): string {
return $account->getFullName();
}
]);
Большое спасибо, это работает, спасибо всем за разные методы. Я понимаю лучше.