Symfony 中的约束
Constraints in Symfony
我有一个名为 Student 的 class,有 StartDate 和 EndDate。我想添加一个 \@Assert()
来验证 StartDate 总是在 EndDate 之前。这就是我所拥有的,但是错误消息没有被执行。是否可以通过其他方式完成。
/**
* @var \DateTime
*
* @ORM\Column(name="startDate", type="datetime", nullable=false)
* @Assert\Type("DateTime")
*/
private $startdate;
/**
* @var \DateTime
*
* @ORM\Column(name="endDate", type="datetime", nullable=false)
* @Assert\Type("DateTime")
* @Assert\Expression("this.getStartDate() < this.getEndDate()",
* message="The end date must be after the start date")
*
*
*/
private $enddate;
不知道您是否可以在注释中做到这一点,但您可以使用 class 验证器来做到这一点,您可以在验证器中访问实体的所有数据并进行比较
http://symfony.com/doc/current/validation/custom_constraint.html#class-constraint-validator
您可以使用一个简单的回调:
/**
* @var \DateTime
*
* @ORM\Column(name="startDate", type="datetime", nullable=false)
* @Assert\Type("DateTime")
*/
private $startdate;
/**
* @var \DateTime
*
* @ORM\Column(name="endDate", type="datetime", nullable=false)
* @Assert\Type("DateTime")
* message="The end date must be after the start date")
*
*
*/
private $enddate;
/**
* @Assert\Callback
*/
public function validateDate(ExecutionContextInterface $context, $payload)
{
if ($this->startdate > $this->enddate) {
$context->buildViolation('Start date has to be befor end date')
->atPath('startdate')
->addViolation();
}
}
详见https://symfony.com/doc/current/reference/constraints/Callback.html。
我有一个名为 Student 的 class,有 StartDate 和 EndDate。我想添加一个 \@Assert()
来验证 StartDate 总是在 EndDate 之前。这就是我所拥有的,但是错误消息没有被执行。是否可以通过其他方式完成。
/**
* @var \DateTime
*
* @ORM\Column(name="startDate", type="datetime", nullable=false)
* @Assert\Type("DateTime")
*/
private $startdate;
/**
* @var \DateTime
*
* @ORM\Column(name="endDate", type="datetime", nullable=false)
* @Assert\Type("DateTime")
* @Assert\Expression("this.getStartDate() < this.getEndDate()",
* message="The end date must be after the start date")
*
*
*/
private $enddate;
不知道您是否可以在注释中做到这一点,但您可以使用 class 验证器来做到这一点,您可以在验证器中访问实体的所有数据并进行比较
http://symfony.com/doc/current/validation/custom_constraint.html#class-constraint-validator
您可以使用一个简单的回调:
/**
* @var \DateTime
*
* @ORM\Column(name="startDate", type="datetime", nullable=false)
* @Assert\Type("DateTime")
*/
private $startdate;
/**
* @var \DateTime
*
* @ORM\Column(name="endDate", type="datetime", nullable=false)
* @Assert\Type("DateTime")
* message="The end date must be after the start date")
*
*
*/
private $enddate;
/**
* @Assert\Callback
*/
public function validateDate(ExecutionContextInterface $context, $payload)
{
if ($this->startdate > $this->enddate) {
$context->buildViolation('Start date has to be befor end date')
->atPath('startdate')
->addViolation();
}
}
详见https://symfony.com/doc/current/reference/constraints/Callback.html。