如果不为空,则验证嵌入表单

问题描述 投票:0回答:1

我有两个实体:ProgramWidget

程序

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

我有两个问题。

首先,我需要在WidgetaddressIdextAddressId上添加条件约束,而不是两者。

widget不需要第二个Program。您可以将所有表单字段留空,就像您不想在窗体中添加窗口小部件或填充表单一样,但您必须遵守条件约束,当然还有必需的字段。

我试图添加一个Callback,因为它在官方文档here中解释,但我不知道如何结合两者。

symfony doctrine
1个回答
1
投票

首先,您必须定义Assert von widget关系,例如

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"
     * )
© www.soinside.com 2019 - 2024. All rights reserved.