gpt4 book ai didi

php - 在 Symfony 中验证可选属性

转载 作者:可可西里 更新时间:2023-10-31 23:18:51 25 4
gpt4 key购买 nike

我喜欢像这样将 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;

这将确保“名称”永远不会为空、空白或具有 <2 或 > 255 个字符。

但是当我们假设有一个类似的字段,如 description 应用相同的规则但它是一个可选属性时,如何实现这一点?

我知道我可以编写回调函数,具有自定义约束等等...但这将迫使我为所有现有验证器(NotBlank、Length、Number、Valid a.s.o)创建自己的逻辑。

我会寻找类似的东西:

/**
* @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;

因此描述可以为空,但如果它不为空,则它不能为空并且必须有 > 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;

并减去 @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;

关于php - 在 Symfony 中验证可选属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31746854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com