我遇到了symfony2表单的问题,如果没有提交相应的表单输入,它会将我的实体数据覆盖为null。
以下是一个例子:
表格类型:
$builder
->add('customerid', 'text')
->add('field1', 'text')
->add('field2', 'text')
...
控制器:
$customer = new Customer();
$customer->setId('the customerID');
$customerForm = $this->createForm(new CustomerType(), $customer);
if ($request->getMethod() == 'POST') {
$customerForm->bind($request);
...
}
在视图中,我不呈现customerid文本字段。 只提交了其他字段。
提交表单后,$ customerForm-> bind($ request);即使没有为其提交空值,也会将先前设置的customerID重置为null。
如果没有渲染输入字段,有没有办法不覆盖值?
这似乎是同样的问题: https://github.com/symfony/symfony/issues/1341 提交了一个补丁,但我没有找到关于如何使用它的文档。
由于
答案 0 :(得分:4)
表单中的任何字段(无论是否呈现)都将具有值,无论是null还是字段的值。
您使用的是哪个版本的Symfony?
我假设您正在使用< 2.3,因为我认为bind已更改为在2.3提交。 使用绑定将每个字段合并到对象中意味着它将替换数据,null或其他。 我认为解决这个问题的唯一方法是在表单中不包含不需要的字段,或者使用事件监听器作为documented in the cookbook。
如果您使用的是2.3+(或升级到2.3+),那么您应该使用$ form-> submit(),它有第二个参数,允许您将表单设置为不覆盖对象属性(如果它们是空值。例如$form->submit($request->get($form->getName()), false)
(true是设置/取消设置覆盖的布尔值,或实际代码上的$ clearMissing)