qnixdev
@qnixdev
Junior+ PHP Developer

Как добавить новый option в форму если тип поля EntityType::class??

есть следующая форма:
<?php

use App\Entity\Country;

class TargetingFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('country', EntityType::class, [
                'class' => Country::class,
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('c')->orderBy('c.name', 'ASC');
                },
                'choice_label' => 'name',
                'choice_value' => 'name',
                'multiple'     => true,
            ])
        ;
    }
}


моя цель добавить в начале выпадающего списка которая ничего не будет добавлять в бд:
<option value="">All</option>

Какие есть варианты?
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
qnixdev
@qnixdev Автор вопроса
Junior+ PHP Developer
после совместного поиска решения с BoShurik финальный результат вышел такой:
<?php

use Symfony\Component\Form\ChoiceList\View\ChoiceView;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;

class TargetingFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
                $data = $event->getData();

                if (isset($data['country'])) {
                    if (false !== ($key = array_search('all', $data['country']))) {
                        unset($data['country'][$key]);
                        $event->setData($data);
                    }
                }
            })
        ;
    }

    public function finishView(FormView $view, FormInterface $form, array $options): void
    {
        array_unshift(
            $view->children['country']->vars['choices'],
            new ChoiceView(null, 'all', 'All countries')
        );
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы