当嵌入式表单上使用复选框时,Symfony会创建空关联

时间:2014-04-29 15:00:21

标签: symfony symfony-forms

我有一个Person的表单,其中包含Address的嵌入表单(双向一对一关系,Address作为拥有方(带有FK)。

如果用户提交表单,Symfony将初始化一个空的Address对象并将其分配给$address对象上的$person属性。相反,我希望Symfony能够识别Address的所有表单字段都是空白的,并且它不应该初始化一个空的Address对象。

这可能吗?

编辑:我发现只有当我在嵌入的表单类型上有一个复选框时才会发生这种情况。如果没有复选框,Symfony将不会创建空关联对象。我认为问题是未经检查的复选框被假定为" false"价值,因此Symfony别无选择,只能将其解释为提交的价值。仍在寻找合理的解决方法。

1 个答案:

答案 0 :(得分:0)

可以使用表单事件

执行此操作

http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html

搜索FORM_SUBMIT

然而,我发现它有点复杂。

考虑将Person和Address视为独立对象,然后在检查Address后在控制器中设置关系。类似的东西:

$person = new Person();
$address = new Address();
$formData = array('person' => $person, 'address' => $address);

$builder = $this->formFactory->create('form',$formData);

$builder->add('person',  new PersonFormType());
$builder->add('address', new AddressFormType());

...
if ($form->isValid()
{
    if ($address was filled in properly)
    {
        $person->setAddress($address);
    }
---

我发现上述方法比通过表单事件更容易理解。