2017-01-25 4 views
1

FormEvents::PRE_SUBMIT을 사용하는 AbstractType 사용자 정의 클래스의 EventListener에서 데이터를 가져 오려고 시도하지만 데이터가 빈 필드를 반환합니다. FormEvents::SUBMIT을 사용하면 필드가 데이터를 가져 오지만 필드를 추가 할 수 없습니다.AbstractType의 SymSony 3에서 PRE_SUBMIT EventListener 사용

$form->getData()이 빈 필드를 반환하는 이유를 알고 계십니까?

내 클래스입니다 :

class RegistrationType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options)  
    { 
     $builder 
      ->add('extra', ExtraType::class, array(
       'data_class' => ExtraForm::class 
      )) 
      ->add('sales', SalesType::class, array(
       'data_class' => SalesForm::class 
      )); 

     $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) { 
      $form = $event->getForm(); 
      $data = $form->getData(); 

      //Fields in data are empty 
      echo '<pre>'; 
      print_r($data); 
      echo '</pre>'; 

      /* 
      Example: 
      AppBundle\Entity\User Object 
      (
       [id:protected] => 
       [userType:protected] => 
       [sales:protected] => 
       [extra:protected] => 
       [username:protected] => 
       [usernameCanonical:protected] => 
       [email:protected] => 
      ) 
      */ 

      //CODE 
     }); 
    } 

    //CODE 
} 

감사합니다!

답변

1

데이터가 양식에 제출되기 전에 PRE_SUBMIT이 호출되기 때문입니다. 따라서 PRE_SUBMIT이 실행될 때 $form->getData()이 비어있는 것입니다. The doc says 다음 FormEvents::PRE_SUBMIT 이벤트가 Form::submit() 방법의 시작 부분에 전달됩니다

. 폼에 데이터를 제출하기 전에 요청에서

  • 변경 데이터;

    는 그것은하는 데 사용할 수 있습니다

  • 양식에 데이터를 제출하기 전에 양식 필드를 추가하거나 제거하십시오. 사용자가 데이터에 액세스하려면

당신은 이벤트 처리기로 전송 FormEvent 매개 변수에 직접 할 필요가있다. 귀하의 경우는 $event->getData()입니다.

FormEvent and its getData() method in the API을 참조하십시오.

+0

오, 정말 고마워요! – sgb004