Opcjonalny formularz osadzania w Symfony 2

Mam dwa podmioty w moim systemie:Person iPhone jak poniższy kod.

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;
};

Mam także formularz do tworzenia i aktualizowania osoby (za pomocą telefonu), więc mamPersonType które mają formularz osadzenia reprezentujący telefon (PhoneType).

Moim problemem jest to, że osoba może mieć opcjonalnie telefon, ale jeśli osoba ma telefon, wymagane są wszystkie pola telefoniczne. Jeśli więc użytkownik nie zapisuje niczego na wszystkich polach telefonicznych, oznacza to osobę bez telefonu i ta sprawa jest ważna. Jeśli jednak użytkownik wypełni przynajmniej jedno pole formularza, wymagane są wszystkie inne pola.

Próbuję zastosować podejście, ustawiając telefon na null, jeśli wszystkie pola telefoniczne nie są wypełnione, zostało to zaimplementowane w dniusetPhone wPerson jednostka. Ale mając null phone, Symfony mówi mi, że wszystkie pola telefoniczne są wymagane, ale nie są wypełnione. Wierzę, że Symfony nie sprawdzi poprawności telefonu, ponieważ przypuszczam, że Symfony zastosuje sprawdzanie poprawności bezpośrednio na osobniku. Mając null phone, dlaczego chcesz mi powiedzieć, że wszystkie pola telefoniczne nie są wypełnione?

Czy istnieje sposób na zrobienie tego, co chcę (najlepiej bez modyfikowania wszystkich moich kontrolerów i typów formularzy, czyli na poziomie elementu lub komponentu walidacji)?

EDYTOWAĆ: Przepraszamy, jest coś nie wymienionego, jeśli użytkownik wypełni pole telefoniczne, wszystkie pola telefoniczne muszą być zatwierdzone oddzielnie przy użyciu różnych walidatorów (aby sprawdzić, czy pole jest dobrze uformowanym numerem, aby sprawdzić poprawną długość itp.). Jeśli jednak użytkownik opuści wszystkie pola telefoniczne, należy zignorować sprawdzanie poprawności poszczególnych pól.

Dzięki!

questionAnswers(5)

yourAnswerToTheQuestion