我有两个实体: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
,正如官方文档here中所述,但是我不知道如何将两者结合起来。
答案 0 :(得分:1)
首先,您必须定义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"
* )