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