在AbstractType Symfony 3中使用PRE_SUBMIT EventListener

时间:2017-01-25 00:27:28

标签: php symfony addeventlistener

我尝试使用FormEvents::PRE_SUBMIT从AbstractType自定义类中的EventListener获取数据,但数据返回空字段,如果我使用FormEvents::SUBMIT,字段获取数据,但我无法添加字段。

你知道为什么$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 个答案:

答案 0 :(得分:1)

这是因为在将数据提交给表单之前调用了PRE_SUBMIT。这就是$form->getData()在触发PRE_SUBMIT时为空的原因。 The doc says

  

FormEvents::PRE_SUBMIT方法的开头调度Form::submit()事件。

     

它可以用于:

     
      
  • 在将数据提交到表单之前更改请求中的数据;
  •   
  • 在将数据提交到表单之前添加或删除表单字段。
  •   

如果要访问数据,则需要直接在发送到事件处理程序的FormEvent参数中进行访问。在您的情况下是$event->getData()

请参阅FormEvent and its getData() method in the API