了解表单事件 - Symfony

Understanding Forms Events - Symfony

假设我的控制器中有如下形式

$data = [];
    $form = $this->createFormBuilder($data)
            ->add('username', 'text', [ 'mapped' => FALSE, 'required' => FALSE ])
            ->add('show_email', 'checkbox', [ 'mapped' => FALSE, 'required' => FALSE ])
            ->add('submit', 'submit')
            ->addEventListener(\Symfony\Component\Form\FormEvents::PRE_SUBMIT, function($event){
                $user = $event->getData();
                $form = $event->getForm();

                if (true == $user['show_email']) {
                    $form->add('email', 'email', [
                        'required' => FALSE,
                         'data' => 'test@gmail.com'
                    ]); 
                }

                $form->setData($user);
            })
            ->getForm()
            ;
    $form->handleRequest($request);

并且我正在监听 PRE_SUBMIT 事件以在用户检查 show_email 时添加 email 字段。在 PRE_SUBMIT 期间,email字段添加成功,但是当我尝试在该字段中分配数据时,它没有显示在表单视图中。在示例中,我使用 'data' => 'test@gmail.com'email field 添加值,但该值未填充到电子邮件字段中。那么我在这里犯了什么错误?

我通过将 email 字段值添加到 event data 解决了这个问题,例如 $data['email'] = "test@gmail.com",然后 reassign 事件数据再次 $event->setData($data)

 ->addEventListener(\Symfony\Component\Form\FormEvents::PRE_SUBMIT, function($event){

                $form = $event->getForm();
                $data = $event->getData();

                if(isset($data['showEmail']) && $data['showEmail'] == TRUE){
                    $form->add('email', 'email', [
                       'mapped' => FALSE ,
                    ]);
                    $data['email'] = "test@gmail.com";
                }
                else
                {
                    unset($data['email']);
                }

                $event->setData($data);
            })