我的系統中有兩個實體:Person
和Phone
,如下面的代碼。在Symfony 2中可選的嵌入形式
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會直接在人物實體上應用驗證。有一個空手機,爲什麼告訴我,所有的手機領域沒有填補?
有沒有辦法做我想做的事(最好不要修改我的所有控制器和表單類型,即在實體或驗證組件級別)?
編輯:對不起,沒有提到的東西,如果用戶填寫手機領域,所有手機領域需要與不同的驗證器(需單獨驗證檢查,如果一個字段是一個很好形成數,以檢查正確的長度等)。但是,如果用戶留下所有電話字段,則應忽略每場驗證。
謝謝!
你能檢查一下編輯過的文章嗎? – eagleoneraptor 2012-08-21 16:04:03