Как объединить имя и фамилию в форме EntityType Symfony 7

У меня есть учетная запись сущности с двумя полями 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
            ])

Я пытался создать метод в своей учетной записи, но не могу его вызвать.

Спасибо за помощь.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
143
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

см. 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
            ])

Большое спасибо, это работает, спасибо всем за разные методы. Я понимаю лучше.

Gigi_IT 20.02.2024 15:24

Вы можете создать частную функцию следующим образом:

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();
    }
]);

Другие вопросы по теме