Создайте пользовательский choice_label в symfony 5 EntityType - PullRequest
0 голосов
/ 15 января 2020

Я создаю форму и добавляю поле EntityType:

        ->add('name', EntityType::class, [
            'class' => MyTest::class,
            'choice_label' => function($name){
                return $name->getName();
            },
            'mapped' => false
        ])

Я хочу показать Имя, которое Категория является автомобилем.

Моя таблица базы данных:

id | имя | категория

Ответы [ 2 ]

1 голос
/ 19 января 2020

Добавьте query_builder к вашему коду.

    ->add('name', EntityType::class, [
        'class' => MyTest::class,
        'query_builder' => function(EntityRepository $er){
            return $er->createQueryBuilder('u')
                ->where('u.category = :category')
                ->setParameter('category', 'car');
        },
        'choice_label' => function($name){
            return $name->getName();
        },
        'mapped' => false
    ])
1 голос
/ 15 января 2020

Просто сделайте это, в функции обратного вызова на choice_label вы можете сделать все, чтобы изменить метку, в случае, если категория - строка, пропустите getName (), если вы хотите отобразить категорию, а не строку на основе имени категории пропустите также переключатель

->add('name', EntityType::class, [
            'class' => MyTest::class,
            'choice_label' => function(MyTest $entity){
                switch($entity->getCategory()->getName()) {
                    case 'car':
                        return 'It\'s a car!';
                }
                return $entity->getCategory()->getName();
            },
            'mapped' => false
        ])
...