2016-01-24 36 views
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 
      )); 
     } 

    } 

回答

0

我找到了解決辦法,它是:

$ form-> get( 'medical_center') - >的get( 'medical_center') - >的getData();

相關問題