Symfony 4:验证日期间隔类型

Symfony4: Validate DateIntervalType

我目前被困在一个可能非常简单的问题上。

如何验证我的 DateIntervalType 为 != 0 - 意味着至少已经 select 编辑了某些内容。 以及如何设置 minimum/maximum:例如最小间隔为 1 天。

背景: 我想每隔 X years/months/days 发送一封电子邮件,具体取决于用户 select - 间隔为 0 意味着永久发送电子邮件,我不想要。

遗憾的是,我还没有找到任何有用的信息。还尝试了 @Assert\GratherThan 等整数断言,但这不起作用。

提前致谢

看起来你应该可以使用 Expression constraint 也许像这样(我不确定在注释中构造 \DateInterval 的语法)

/**
 * @Assert\Expression(
 *     "value >= minimum",
 *     values = { "minimum": new \DateInterval('P1D') }
 * )
 */
$dateIntervalField;

或者,您应该能够将最小间隔设置为实体 属性,然后将值与其进行比较。

public function __construct()
{
  $this->minInterval = new \DateInterval('P1D');
}

/**
 * @Assert\GreaterThanOrEqual(
 *     value = this.minInterval
 * )
 */
$dateIntervalField;

解决方案:感谢@Arleigh Hix 为我指明了正确的方向。

我通过以下解决方案解决了我的问题:

/**
 * @Assert\Expression("this.checkInterval()")
 */
private $interval;

public function checkInterval() {
    return $this->getTimestamp()->add($this->getInterval()) > $this->getTimestamp(); //getTimestamp() returns a DateTime
}

所以基本上只需将间隔添加到任何日期并将新日期与初始日期进行比较。通过这种方式,您还可以获得以秒为单位的差异并比较最小最大值。

更好的做法可能是创建一个 custom validator,这将是我的下一步。