私のシステムには 2 つのエンティティがあります: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
ます。
私の問題は、人がオプションで電話を持つことができるということですが、人が電話を持っている場合は、すべての電話フィールドが必要です。したがって、ユーザーがすべての電話フィールドに何も書き込まない場合、これは電話のない人を表し、このケースは有効です。ただし、ユーザーが少なくとも 1 つのフォーム フィールドに入力する場合、他のすべてのフィールドは必須です。
すべての電話フィールドが入力されていない場合、電話を null に設定するアプローチを試みます。これはエンティティに実装さsetPhone
れています。Person
しかし、電話番号が null の場合、Symfony はすべての電話番号フィールドが必須であるが、入力されていないことを教えてくれます。Symfony は検証を person エンティティに直接適用すると思われるため、Symfony は電話を検証しないと思います。ヌルの電話を持っているのに、なぜすべての電話フィールドが入力されていないと教えてくれるのですか?
私が望むことを行う方法はありますか (できれば、すべてのコントローラーとフォームの種類を変更せずに、つまり、エンティティまたは検証コンポーネント レベルで) 方法はありますか?
編集:申し訳ありませんが、言及されていないことがあります。ユーザーが電話番号フィールドに入力した場合、すべての電話番号フィールドを異なるバリデーターで個別に検証する必要があります (フィールドが整形式の数値であるかどうかを確認するため、正しい長さを確認するためなど)。ただし、ユーザーがすべての電話フィールドを空のままにした場合、フィールドごとの検証は無視されます。
ありがとう!