微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Symfony 全局设置验证约束选项?

如何解决如何在 Symfony 全局设置验证约束选项?

我需要为 format 验证约束更改 DateTime,但我想在全局范围内为整个应用程序执行此操作,而不是像这样复制粘贴:

dateFrom:
  - DateTime
      format: Y-m-d\TH:i:s.vP
dateto:
  - DateTime
      format: Y-m-d\TH:i:s.vP

(我在我的应用程序中使用 yaml 配置)

是否有任何选项可以在 Symfony 5 应用程序中使用 DI 参数或其他方式全局执行此操作?

我在官方文档中没有找到任何相关信息。

解决方法

您可以创建一个扩展 Symfony\Component\Validator\Constraints\DateTime 的自定义约束并在那里设置格式。

// src/Validator/Constraints/MyDateTime.php
namespace App\Validator\Constraints;

use Symfony\Component\Validator\Constraints\DateTime as BaseDateTime;

class MyDateTime extends BaseDateTime
{
    public $format = 'Y-m-d\TH:i:s.vP';

    public function validatedBy()
    {
        // use the same validator without this symfony will look for 'App\Validator\Constraints\MyDateTimeValidator' 
        //return static::class.'Validator';

        return parent::class.'Validator';
    }
}

然后您只需在需要的地方使用自定义约束。

YAML:

# config/validator/validation.yaml
App\Entity\Author:
    properties:
        createdAt:
            - NotBlank: ~
            - App\Validator\Constraints\MyDateTime: ~

注释:

// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;
use App\Validator\Constraints as MyAssert;

class Author
{
    /**
     * @Assert\NotBlank
     * @MyAssert\MyDateTime 
     * @var string A "Y-m-d\TH:i:s.vP" formatted value
     */
    protected $createdAt;
}

所以你的配置看起来像这样:

dateFrom:
  - App\Validator\Constraints\MyDateTime: ~

https://symfony.com/doc/current/validation/custom_constraint.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。