验证Symfony中的可选属性

时间:2015-07-31 13:01:18

标签: php symfony

我喜欢在我的庞大实体模型中使用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;

这将确保" name"永远不会为空,空白或有< 2或> 255个字符。

但是,当我们说“ description ”之类的相似字段适用相同的规则但是它是一个可选属性时,如何实现这一目标?

我知道我可以编写Callback函数,具有自定义约束等等......但是这将迫使我为所有现有的Validators(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;

因此描述可以为null,但如果它不为null,则它不能为空,并且必须具有> 2或者< 255个字符。

我想为此创建一个自定义约束 - 但是我能够以某种方式将标准验证器和参数交给我的自定义验证器以避免重新创建\ NotBlank \ Length等所有我自己并且只是重用标准的?

由于

1 个答案:

答案 0 :(得分:2)

我认为你在第一个上错过了@Assert/NotNull(),我认为第二个错过了Optional @Assert()部分,因为@Assert/NotNull()不是NotBlank()包括在内。 NotNull()Length(min)不会强制执行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的{​​{1}}:

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