了解表单事件 - 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);
})
假设我的控制器中有如下形式
$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);
})