我有一个Person
的表单,其中包含Address
的嵌入表单(双向一对一关系,Address
作为拥有方(带有FK)。
如果用户提交表单,Symfony将初始化一个空的Address
对象并将其分配给$address
对象上的$person
属性。相反,我希望Symfony能够识别Address
的所有表单字段都是空白的,并且它不应该初始化一个空的Address
对象。
这可能吗?
编辑:我发现只有当我在嵌入的表单类型上有一个复选框时才会发生这种情况。如果没有复选框,Symfony将不会创建空关联对象。我认为问题是未经检查的复选框被假定为" false"价值,因此Symfony别无选择,只能将其解释为提交的价值。仍在寻找合理的解决方法。
答案 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);
}
---
我发现上述方法比通过表单事件更容易理解。