【问题标题】:Symfony constraint LessThan DateSymfony 约束小于日期
【发布时间】:2021-01-28 09:25:56
【问题描述】:

我使用 Symfony v5.2 我已经创建了这个约束:

$constraint = new Assert\Collection([
            'firstname' => [
                new Assert\NotNull(),
                new Assert\NotBlank()
            ],
            'lastname' => [
                new Assert\NotNull(),
                new Assert\NotBlank()
            ],
            'birthdate' => [
                new Assert\NotNull(),
                new Assert\NotBlank(),
                new Assert\Date(),
                new Assert\LessThan('today')
            ]
        ]);

然后我用邮递员发送这个 JSON:

{
    "firstname": "john",
    "lastname": "doe",
    "birthdate": "2030-01-01"
}

但是断言没有被触发。似乎 lessThan 只在 DateTime 上,但不确定。

我做错了什么?我需要自己检查日期吗?

【问题讨论】:

    标签: php symfony date symfony-validator


    【解决方案1】:

    在您的情况下,LessThan 验证器比较了 2 个字符串

    验证前应将birthdate的请求值转换为DateTime的对象。

    【讨论】:

    • 如果有NotBlank 断言,也不需要NotNull 断言
    • 根据documentation,将DateTime 对象发送到断言中应该是不必要的。所有需要确保的是在比较之前将birthdate 转换为DateTime 对象。
    • @El_Vanja 是的,你是对的,我改变了答案
    • 好的,谢谢您的 cmets !我有一个新问题:当我尝试未来的生日(如 2022-01-01)时,我触发了 lessThan 断言(好)但我也有 Assert\DateTime 的“此值应该是字符串类型”的原因() 我现在发送一个 DateTime 对象。这是因为我发送了一个我知道的 DateTime 对象。您认为我可以检查日期是否正确且日期是否连续小于今天?
    • 好的,我找到了解决方案。我从“生日”数据创建了一个新的 DateTime 对象: $formData['birthDayDateTime'] = new \DateTime($formData['birthdate']);然后我像这样检查: 'birthdate' => [ new Assert\NotBlank(), new Assert\Date() ], 'birthDayDateTime' => [ new Assert\LessThan('today') ] 谢谢 :)
    猜你喜欢
    • 2017-09-04
    • 2011-05-04
    • 2021-10-18
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多