Php Symfony2表单提交/验证后设置实体属性
我正在提交一份symfony2表格,如果某个实体的电子邮件字段未填写且该属性已提交为“true”,我想将该实体属性设置为false 我现在通过以下方式做到这一点:Php Symfony2表单提交/验证后设置实体属性,php,symfony,symfony-forms,Php,Symfony,Symfony Forms,我正在提交一份symfony2表格,如果某个实体的电子邮件字段未填写且该属性已提交为“true”,我想将该实体属性设置为false 我现在通过以下方式做到这一点: $myForm = $this->createForm(new FormType(), $myEntity); $myForm->handleRequest($request); if ($myForm->isValid()) { if (!$myEntity->getEmail()) {
$myForm = $this->createForm(new FormType(), $myEntity);
$myForm->handleRequest($request);
if ($myForm->isValid()) {
if (!$myEntity->getEmail()) {
$myEntity->setProperty(false);
}
}
现在,当表单提交后显示时,我希望与属性对应的复选框被取消选中。但是表单中的属性复选框没有响应,它保持选中状态
有人知道如何正确地执行此操作吗?我认为这是因为您的表单已绑定到实体。表单已获取实体的数据,并且在实体更改时不会更新。您可以通过以下方式直接在表单上操作:
$myForm['someProperty']->setData( false );
但我希望按照您的第一行再次完全重建表单是更好的做法。谢谢您的回复!更改属性会直接引发异常:“您无法更改已提交表单的数据”,忘了提到我已经尝试过了。重建表单似乎有些过头了?我想这确实有些过头了,但主要的问题是,如果要重新渲染表单,将丢失您想要显示的任何错误状态。如果不是那样的话,我会忍受这种重复。看来
PRE_SUBMIT
form事件可能是最好的选择。我会更新我的答案,但我以前从未使用过。