【问题标题】:Symfony2 forms partial bindingSymfony2 形成部分绑定
【发布时间】:2014-01-04 04:14:58
【问题描述】:

如果未提交相应的表单输入,我会遇到 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);即使没有为它提交空值,也会用 null 覆盖先前设置的 customerID。

如果输入字段未呈现,有什么方法可以不覆盖该值?

这似乎是同样的问题: https://github.com/symfony/symfony/issues/1341 提交了一个补丁,但我没有找到有关如何使用它的文档。

谢谢

【问题讨论】:

    标签: php forms symfony symfony-forms


    【解决方案1】:

    表单中的任何字段(无论是否呈现)都会有一个值,要么为 null,要么为该字段的值。

    您使用的是哪个版本的 Symfony?

    我假设您使用的是 documented in the cookbook。

    如果您使用的是 2.3+(或升级到 2.3+),那么您应该使用 $form->submit() ,它有第二个参数,允许您将表单设置为不覆盖对象属性(如果它们为空) .例如$form->submit($request->get($form->getName()), false)(true 是设置/取消设置覆盖的布尔值,或实际代码上的 $clearMissing)

    【讨论】:

    • 感谢您的回复。如果我在我的表单类型中添加一些“不需要的”字段,那是因为我正在重用这个表单类型来生成需要这个字段的其他表单。将尝试您的解决方案
    • 刚试了一下,还是不行。也许我有问题。我刚刚用$customerForm->submit($request->get($customerForm->getName()), true); 替换了$customerForm->bind($request);,而我的缺失字段仍然被“null”替换。我正在使用 symfony 2.4.0。
    • 好的,它正在工作......第二个参数必须为'false'才能禁用覆盖。我不假思索地复制/粘贴了您的代码。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2014-03-07
    • 2016-01-28
    • 2018-07-14
    相关资源
    最近更新 更多