Проверить встраиваемую форму, если она не пуста - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть две сущности: Program и Widget

Программа

class Program
{
     ....
    /**
     * @Assert\Valid
     * 
     * @ORM\OneToOne(targetEntity="Widget", inversedBy="program", cascade={"persist", "remove"}, orphanRemoval=true)
     * @ORM\JoinColumn(nullable=true)
     */
    private $widget;
}

Виджет

class Widget
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="integer")
     */
    private $addressId;

    /**
     * @ORM\Column(type="integer")
     */
    private $extAddressId;

    /**
     * @ORM\Column(type="string")
     */
    private $language;

    /**
     * @ORM\OneToOne(targetEntity="Program", mappedBy="widget")
     */
    private $program;
}

У меня есть две проблемы.

Сначала мне нужно добавить условное ограничение для Widget, addressId или extAddressId, т.е. должны быть определены, а не оба.

Второй widget не требуется для Program.Либо вы оставляете все поля формы пустыми, как будто вы не хотите добавлять виджет в форму, ИЛИ вы заполняете форму, но вы должны соблюдать условное ограничение и, конечно, обязательные поля.

Я былпытаюсь добавить Callback, как это объяснено в официальном документе здесь , но я понятия не имею, как объединить оба.

1 Ответ

0 голосов
/ 19 февраля 2019

Сначала необходимо определить отношение виджета Assert von, например

Column Widet
@Assert\Valid()

Далее вы должны поработать с выражениями в самом виджете, например

Column adressId
@Assert\Expression(
     *     expression=" (this.getAdressId() and !this.extAdressId()) or !this.getAdressId() ",
     *     message="error.cant_be_enabled_with_adress_id"
     * )

Column extAdressId
@Assert\Expression(
     *     expression=" (this.getExtAddressId() and !this.getAdressId()) or !this.getExtAdressId() ",
     *     message="error.cant_be_enabled_with_adress_id"
     * )
...