我的系统中有两个实体:Person
和Phone
以下代码。
class Person
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=100)
*/
private $name;
/**
* @ORM\Column(type="string", length=100)
*/
private $lastName;
/**
* @ORM\OneToOne(targetEntity="Phone", cascade={"persist"})
*/
private $phone;
};
class Phone
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="PhoneType")
*/
private $type;
/**
* @ORM\Column(type="integer")
*/
private $countryCode;
/**
* @ORM\Column(type="integer")
*/
private $regionCode;
/**
* @ORM\Column(type="integer")
*/
private $number;
};
我还有一个表单来创建和更新一个人(使用电话),所以我有PersonType
一个嵌入表单,代表电话(PhoneType
)。
我的问题是一个人可以选择拥有电话,但如果该人有电话,则所有电话字段都是必需的。因此,如果用户在所有电话字段上都没有写任何内容,则表示一个没有电话的人,这种情况是有效的。但如果用户填写了至少一个表单字段,则所有其他字段都是必需的。
如果未填写所有电话字段,我尝试通过将电话设置为 null 来采取一种方法,这是setPhone
在Person
实体中实现的。但是有一个空电话,Symfony 告诉我所有电话字段都是必需的,但没有填写。我相信 Symfony 不会验证手机,因为我认为 Symfony 会直接在个人实体上应用验证。有一个空电话,为什么告诉我所有电话字段都没有填写?
有没有办法做我想做的事(最好不修改我所有的控制器和表单类型,即在实体或验证组件级别)?
编辑:抱歉,有一点没有提到,如果用户填写电话字段,所有电话字段都需要使用不同的验证器单独验证(检查字段是否是格式正确的数字,检查正确的长度等)。但是,如果用户将所有电话字段留空,则应忽略每个字段的验证。
谢谢!