Symfony2 验证日期时间 1 应早于日期时间 2

2022-08-30 20:19:11

我正在查看Symfony2验证参考,但我没有找到我需要的东西。

我有一个班级就业与开始日期结束日期。我想添加一个\@Assert(),它验证StartDate总是在EndDate之前。是否有将类属性作为验证约束进行比较的标准方法,或者我应该创建自定义验证约束?

class Employment {

    /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="AUTO")
    * @Expose() 
    */
    protected $id;

    /**
    * @ORM\Column(type="datetime") 
    * @Expose()
    * @Assert\DateTime()
    */
    protected $startDate;

    /**
    * @ORM\Column(type="datetime", nullable=TRUE)
    * @Expose()
    * @Assert\DateTime()
    */
    protected $endDate;

...
}

答案 1

您可以向实体添加一个验证获取器 - Symfony2 Validation Getters

在验证中

Acme\YourBundle\Entity\Employment:
    getters:
        datesValid:
            - "True": { message: "The start date must be before the end date" }

然后在您的实体中

public function isDatesValid()
{
    return ($this->startDate < $this->endDate);
}

答案 2

还有另一种解决方案:使用表达式语言进行验证

use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Column(type="date", nullable=true)
 * @Assert\Date()
 */
private $startDate;

/**
 * @ORM\Column(type="date", nullable=true)
 * @Assert\Date()
 * @Assert\Expression(
 *     "this.getStartDate() < this.getEndDate()",
 *     message="The end date must be after the start date"
 * )
 */
private $endDate;

如果需要,可以将此约束添加到 。$startDate


推荐