我目前被一个可能非常简单的问题困住了。
如何验证我的DateIntervalType为!= 0--至少已经选择了一些内容。以及如何设置最小/最大:例如,最小间隔1天。
背景:我想每隔X年/月/日发送一封电子邮件,这取决于用户的选择--间隔为0将意味着永久的电子邮件发送,我不想这样做。
遗憾的是,我还没有发现任何有用的东西。也尝试了整数断言,如@Assert\GratherThan等,但这不起作用。
提前感谢
发布于 2019-09-13 10:55:02
解决方案:感谢@Arleigh Hix让我走上了正确的方向。
我用以下方法解决了我的问题:
/**
* @Assert\Expression("this.checkInterval()")
*/
private $interval;
public function checkInterval() {
return $this->getTimestamp()->add($this->getInterval()) > $this->getTimestamp(); //getTimestamp() returns a DateTime
}基本上,只需将间隔添加到任何日期,并将新日期与初始日期进行比较。通过这种方法,您还可以得到以秒为单位的差异,并比较最小最大值。
更好的做法可能是创建一个自定义验证器,这将是我下一步的工作。
发布于 2019-09-12 09:31:11
看起来您应该能够像这样使用表达式约束 (我不确定在注释中构造\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;https://stackoverflow.com/questions/57902646
复制相似问题