实体验证 - 零个或至少三个
Entity validation - either zero or at least three
我正在使用 symfony 2.8 版本,但遇到了以下问题。我希望将实体 'Article' 的字段 'seeAlso' 限制为零 (none) 或至少 3 个对象(另一篇文章)。所以我在我的 yaml 验证中有这些:
seeAlso:
- Count:
min: 3
minMessage: 'you have got to pick zero or at least three articles'
它检查是否小于三个好,但它不允许我让该字段为空。我该怎么做?
您应该定义自定义验证。您可以通过两种方式进行
1 创建自定义验证约束
首先你需要创建一个约束class
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class ConstraintZeroOrAtLeastThreeConstraint extends Constraint
{
public $message = 'Put here a validation error message';
public function validatedBy()
{
return get_class($this).'Validator';
}
}
在这里你定义了一个带有消息的约束,你告诉 symfony 这是验证器(我们将在下面定义)
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class ZeroOrAtLeastThreeConstraintValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
if (!count($value)) {
return;
}
if (count($value) >= 3) {
return;
}
$this
->context
->buildValidation('You should choose zero or at least three elements')
->addViolation();
}
}
现在您可以在 属性 上使用您的验证器,方法是使用 @ ConstraintZeroOrAtLeastThreeConstraint
对其进行注释(当然,您必须导入实体文件才能使用)
当然,您甚至可以自定义值 0 和 3,通过使用
将此约束概括为 ZeroOrAtLeastTimesConstraint
public function __construct($options)
{
if (!isset($options['atLeastTimes'])) {
throw new MissingOptionException(...);
}
$this->atLeastTimes = $options['atLeastTimes'];
}
2 在实体内部创建回调验证函数
/**
* @Assert\Callback
*/
public function validate(ExecutionContextInterface $context, $payload)
{
if (!count($this->getArticles()) {
return;
}
if (count($this->getArticles() >= 3) {
return;
}
$context
->buildViolation('You should choose 0 or at least 3 articles')
->addViolation();
}
我正在使用 symfony 2.8 版本,但遇到了以下问题。我希望将实体 'Article' 的字段 'seeAlso' 限制为零 (none) 或至少 3 个对象(另一篇文章)。所以我在我的 yaml 验证中有这些:
seeAlso:
- Count:
min: 3
minMessage: 'you have got to pick zero or at least three articles'
它检查是否小于三个好,但它不允许我让该字段为空。我该怎么做?
您应该定义自定义验证。您可以通过两种方式进行
1 创建自定义验证约束
首先你需要创建一个约束class
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class ConstraintZeroOrAtLeastThreeConstraint extends Constraint
{
public $message = 'Put here a validation error message';
public function validatedBy()
{
return get_class($this).'Validator';
}
}
在这里你定义了一个带有消息的约束,你告诉 symfony 这是验证器(我们将在下面定义)
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class ZeroOrAtLeastThreeConstraintValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
if (!count($value)) {
return;
}
if (count($value) >= 3) {
return;
}
$this
->context
->buildValidation('You should choose zero or at least three elements')
->addViolation();
}
}
现在您可以在 属性 上使用您的验证器,方法是使用 @ ConstraintZeroOrAtLeastThreeConstraint
对其进行注释(当然,您必须导入实体文件才能使用)
当然,您甚至可以自定义值 0 和 3,通过使用
将此约束概括为ZeroOrAtLeastTimesConstraint
public function __construct($options)
{
if (!isset($options['atLeastTimes'])) {
throw new MissingOptionException(...);
}
$this->atLeastTimes = $options['atLeastTimes'];
}
2 在实体内部创建回调验证函数
/**
* @Assert\Callback
*/
public function validate(ExecutionContextInterface $context, $payload)
{
if (!count($this->getArticles()) {
return;
}
if (count($this->getArticles() >= 3) {
return;
}
$context
->buildViolation('You should choose 0 or at least 3 articles')
->addViolation();
}