Как получить значение поля в конструкторе форм в Symfony

Как получить значение поля в конструкторе форм в Symfony.
У меня есть 2 выпадающих в форме
Я хочу, чтобы соответствующая опция в Dropdown2 основывалась на Dropdown1 при открытии страницы.

Вот моя форма

use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\Event\DataEvent;
use C2Educate\ToolsBundle\Entity\Students;
public function buildForm(FormBuilder $builder, array $options) {

Поле 1:

$builder->add('leadSource', 'entity', array(
'label' => 'How did you hear about C2?   Source ',

'class' => 'C2EducateToolsBundle:LeadSources',
'query_builder' => function($repo)  {
return $repo->createQueryBuilder('p')->orderBy('p.sort_order', 'ASC');
},
'property' => 'name',
'empty_value' => 'Select'

));
$leadSource = 1;

$leadSource = 1; — это работает, когда я назначаю значение статически, но я хочу получить значение «leadSource» и присвоить его $leadSource

Я хочу получить leadSource и передать его на запрос leadSourceSub

Поле 2:

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (DataEvent $event) {
$form = $event->getForm();
$entity = $event->getData();
$leadSource = $entity->getLeadSourceID();
$form->add('leadSourceSub', 'C2Educate\ToolsBundle\Entity\Students', array(
'label' => ' Source Detail ',
'required' => true,
'class' => 'C2EducateToolsBundle:LeadSourceSubs',
'query_builder' => function($repo) use ($leadSource) {
return $repo->createQueryBuilder('p')
->where('p.lead_source_id =:leadSource')
->setParameter('leadSource', $leadSource)
->orderBy('p.sort_order', 'ASC');
},
'property' => 'name',
'empty_value' => 'Select'
));
});

2

Решение

Вы не можете получить данные формы из $builderпотому что … это форма строитель, не форма Пока не содержит никаких данных.

Чтобы сделать эту работу, вам нужно использовать FormEvents, В этом случае вам, вероятно, понадобится FormEvents::PRE_SET_DATA слушатель событий.

    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$form = $event->getForm();
// in your case it's C2EducateToolsBundle:LeadSourceSubs
$entity = $event->getData();
$leadSource = $entity->getLeadSource();

// adding this field again will override it.
$form->add('leadSourceSub', 'entity', array(
'label' => ' Source Detail ',
'required' => true,
'class' => 'C2EducateToolsBundle:LeadSourceSubs',
'query_builder' => function($repo) use ($leadSource) {
return $repo->createQueryBuilder('p')
->where('p.lead_source_id =:leadSource')
->setParameter('leadSource', $leadSource)
->orderBy('p.sort_order', 'ASC');
},
'property' => 'name',
'empty_value' => 'Select'
));
}
});

Обратите внимание, что этот код не проверен и может потребоваться проверка, например, чтобы проверить, $entity это то, что вы ожидаете, что в любом случае.

3

Другие решения

Других решений пока нет …