Symfony - 自动设置过期时间
Symfony - set expiration time automatically
我正在我的表单中设置新实体,我有一个字段 'created',我想用它来自动设置到期时间。我希望在设置实体后 30 分钟将过期字段设置为真。
我创建了一些逻辑,但我认为它行不通。
我的部分代码:
$dateNow = new \DateTime();
$entity->setCreated($dateNow)->modify("+33 Minutes");
if($dateNow >= $entity){
$entity->setExpired(true);
$this->em->persist($entity);
$this->em->flush();
}
if($entity->isExpired()) {
throw new /Exception('Sorry,it is expired.');
}
你知道在 Doctrine 中使用 setter 时如何做到这一点吗?谢谢
在您的示例中,您将 DateTime 实例与您的实体进行比较,该实体可能是另一种类型而不是 DateTime。
要查明您的实体是否已过期,只需将设置为已创建的 DateTime 实例与新的 DateTime 实例进行比较即可。您可以使用 diff() 方法。可能在你的数据库中存储一个标志是没有用的,但我不知道你的用例。
它可能看起来类似于此(未测试):
<?php
//...
function isExpired() {
$diff = $this->createdAt->diff(new DateTime());
return $diff->i >= 30;
}
我想更正上面的答案 $diff->m
代表月份,分钟是 'i' 所以正确的代码应该是 $diff->i >= 30
我正在我的表单中设置新实体,我有一个字段 'created',我想用它来自动设置到期时间。我希望在设置实体后 30 分钟将过期字段设置为真。
我创建了一些逻辑,但我认为它行不通。
我的部分代码:
$dateNow = new \DateTime();
$entity->setCreated($dateNow)->modify("+33 Minutes");
if($dateNow >= $entity){
$entity->setExpired(true);
$this->em->persist($entity);
$this->em->flush();
}
if($entity->isExpired()) {
throw new /Exception('Sorry,it is expired.');
}
你知道在 Doctrine 中使用 setter 时如何做到这一点吗?谢谢
在您的示例中,您将 DateTime 实例与您的实体进行比较,该实体可能是另一种类型而不是 DateTime。
要查明您的实体是否已过期,只需将设置为已创建的 DateTime 实例与新的 DateTime 实例进行比较即可。您可以使用 diff() 方法。可能在你的数据库中存储一个标志是没有用的,但我不知道你的用例。
它可能看起来类似于此(未测试):
<?php
//...
function isExpired() {
$diff = $this->createdAt->diff(new DateTime());
return $diff->i >= 30;
}
我想更正上面的答案 $diff->m
代表月份,分钟是 'i' 所以正确的代码应该是 $diff->i >= 30