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