Symfony Assert\Expression 将实体属性与今天的日期进行比较

标签 symfony expression entity assert

我想将 Assert\Expression 添加到我的实体的属性中。 There should be an error message popping up, when the selected "Effective date"(this.getEffective()) is in the past or today.我只是想不通,如何将那个日期与今天的日期进行比较。

    /**
 * @var boolean
 * @ORM\Column(type="boolean", nullable=true)
 * @Assert\Expression(
 *     "this.getEffective() > today",
 *     message="The effective date must be in the future!")
 */
private $status_stealth;

我对 nowdatetime.now() 进行了同样的尝试,并且我在谷歌上搜索了很多,但我没有发现任何人实际上比较过另一个断言表达式中包含当前日期的值。

想法?

最佳答案

默认情况下,表达式语法只支持一个函数,constant()。反过来,表达式验证器带有一个或两个变量(一个验证值和一个上下文对象)。您可以将值传递给实体的验证方法。

/**
 * @Assert\Expression(expression="this.isStatusValid(value)")
 */
private $status;

public function isStatusValid($status) {
    $currentDate = new \DateTimeImmutable();
    return in_array($status, [1, 2, 3]) && $this->targetDate > $currentDate;
}

如果出现一些错误,只需调试即可。

public function isStatusValid($status) {
    $currentDate = new \DateTimeImmutable();
    var_dump($this->targetDate);
    var_dump($currentDate);
    die();
    return in_array($status, [1, 2, 3]) && $this->targetDate > $currentDate;
}

文档链接:Expression Constraint , Expression Syntax .

关于Symfony Assert\Expression 将实体属性与今天的日期进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47415216/

相关文章:

java - 通过单个查询获取最小和最大列值

php - 当文件大于 post_max_size 时,Symfony2 验证器不工作

php - Symfony2 查询生成器 "SELECT where sum children > 0"

linux - Amazon Linux AMI 上的 Symfony2 中的缓存/日志权限

java - MapStruct @Mapping(表达式 ="java(...)")

未知方程的 Java 正则表达式

symfony - 如何在我的选择选项中禁用编码 "&"

regex - 正则表达式根据单词组合过滤行

java - JPQL 中的 LEFT JOIN ON()

entity - SPARQL:获取某个类的子类的所有实体