【问题标题】:How to set option for validation constraint in Symfony globally?如何在 Symfony 中全局设置验证约束选项?
【发布时间】:2021-07-07 16:53:04
【问题描述】:

我需要将 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 参数或其他方式?

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

【问题讨论】:

    标签: php symfony symfony5 symfony-validator


    【解决方案1】:

    您可以创建一个扩展 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 2012-08-17
      • 2021-04-11
      • 1970-01-01
      • 2014-10-05
      相关资源
      最近更新 更多