我喜欢将 Symfony 中的验证注释与我的巨大实体模型一起使用,如下所示:
/**
* @var string
* @ORM\Column(type="string", length=255, nullable=false, name="name")
*
* @Assert\NotBlank(message="Name must not be empty")
* @Assert\Length(min=2, minMessage="Name must be at least 2 characters long",max=255, maxMessage="Name must not be longer than 255 characters")
*/
private $name;
Run Code Online (Sandbox Code Playgroud)
这将确保“名称”永远不会为空、空白或具有 <2 或 > 255 个字符。
但是,当假设有一个类似的字段(例如description)适用相同的规则但它是一个可选属性时,如何实现这一点?
我知道我可以编写回调函数,具有自定义约束等等……但这将迫使我为所有现有的验证器(NotBlank、Length、Number、Valid aso)创建我自己的逻辑。
我会寻找类似的东西:
/**
* @var string
* @ORM\Column(type="string", length=255, nullable=true, name="description")
*
* @OptionalAssert\NotBlank(message="Name must not be empty")
* @OptionalAssert\Length(min=2, minMessage="Name must be at least 2 characters long",max=255, maxMessage="Name must not be longer than 255 characters")
*/
private $description;
Run Code Online (Sandbox Code Playgroud)
所以 description 可以为空,但如果它不为空,则它不能为空,并且必须具有 > 2 或 < 255 个字符。
我想为此创建一个自定义约束 - 但我能够以某种方式将标准验证器和参数移交给我的自定义验证器,以避免自己重新创建 \NotBlank \Length 等,而只是重用标准的?
谢谢
我认为你错过了第一个,第二个我认为减去不包括的部分@Assert/NotNull()就可以了。并且不会强制执行。Optional@Assert()@Assert/NotNull()NotBlank()Length(min)NotNull()
所以你会有这样的东西name:
/**
* @var string
* @ORM\Column(type="string", length=255, nullable=false, name="name")
*
* @Assert\NotNull(message="Name must not be empty")
* @Assert\NotBlank(message="Name must not be empty")
* @Assert\Length(min=2, minMessage="Name must be at least 2 characters long",max=255, maxMessage="Name must not be longer than 255 characters")
*/
private $name;
Run Code Online (Sandbox Code Playgroud)
并@Assert/NotNull()减去description:
/**
* @var string
* @ORM\Column(type="string", length=255, nullable=true, name="description")
*
* @Assert\NotBlank(message="Name must not be empty")
* @Assert\Length(min=2, minMessage="Name must be at least 2 characters long",max=255, maxMessage="Name must not be longer than 255 characters")
*/
private $description;
Run Code Online (Sandbox Code Playgroud)