0
我正在使用Symfony 3.0如何從symfony中的表單事件顯示的字段中獲取數據?
我有一個country-> region-> locality-> medical center表單類型。所有這些領域都使用ajax相互依賴。
我做了四個Event訂閱者,他們每個都有onPreSetData和onPreSubmit。 一切都很好,直到我希望處理控制器中的submited數據爲止。
未被映射的字段我雖然我可以通過訪問sublimited值 $ 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
));
}
}