>我正在使用Symfony 3.0
我有一个国家/地区>区域>地区>医疗中心表单类型。所有这些字段都使用 ajax 相互依赖。
我做了四个事件订阅者,每个订阅者都有onPreSetData和onPreSubmit。一切都运行良好,直到我希望在我的控制器中处理提交的数据。
由于没有映射字段,我虽然可以访问提交的值 $form->get("field_name")->getData();
但对于这些字段,这是空的。
如何访问这些字段中提交的值?
这就是我添加字段的方式:
->add('medical_center', MedicalCenterType::class, array(
'mapped' => false
));
医疗中心类型:
class MedicalCenterType extends AbstractType
{
/** @var EntityManager */
protected $em;
/**
* @param mixed $em
* @return $this
*/
public function setEntityManager($em)
{
$this->em = $em;
return $this;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->addEventSubscriber(new AddCountryFieldSubscriber($this->em, 38))
->addEventSubscriber(new AddRegionFieldSubscriber($this->em, 38))
->addEventSubscriber(new AddLocalityFieldSubscriber($this->em))
->addEventSubscriber(new AddMedicalCenterFieldSubscriber($this->em))
;
}
}
订阅者:
class AddMedicalCenterFieldSubscriber implements EventSubscriberInterface
{
/** @var EntityManager */
protected $em;
/** @var int */
protected $locality;
/** @var int */
public $medical_center;
public function __construct(EntityManager $em, $locality = null)
{
$this->em = $em;
$this->locality = $locality;
}
public static function getSubscribedEvents()
{
return array(
FormEvents::PRE_SET_DATA => 'onPreSetData',
FormEvents::PRE_SUBMIT => 'onPreSubmit'
);
}
public function onPreSetData(FormEvent $event)
{
$this->formModifier($event);
}
public function onPreSubmit(FormEvent $event)
{
$data = $event->getData();
$this->locality = $data['locality'];
$this->formModifier($event);
}
private function formModifier(FormEvent $event)
{
$form = $event->getForm();
$form->add('medical_center', EntityType::class, array(
'placeholder' => 'Select a locality first',
'class' => 'WebsiteBundle:MedicalCenters',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('mc')
->where('mc.localities = :locality')
->orderBy('mc.name')
->setParameter('locality', $this->locality);
},
'constraints' => new NotBlank(),
'choice_label' => 'name',
'mapped'=>false
));
}
}
我找到了解决方案,它是:
$form->get('medical_center')->get('medical_center')->getData();