使用集合类型自定义symfony有效约束的错误消息

时间:2017-12-22 19:34:49

标签: php validation symfony-forms symfony-2.8

我有一个Collection Type

的symfony表单

父表格

->add('items',
    CollectionType::class,
    array('entry_type'=>PurchaseOrderRawMaterialType::class,
        'allow_add'=>true,
        'constraints'=>array(new Valid()),
        'entry_options'=>array('type'=>$options['type'])
        'error_bubbling'=>false,
        )
   );

儿童表格

$form
    ->add('rawMaterial',
           EntityType::class,
           array('class'=>RawMaterialInventory::class,
                 'constraints'=>array(new NotBlank()),
              )
        )
    ->add('qty',
          NumberType::class,
          array('constraints'=>
                    array(new NotBlank(),
                          new Type(array('type'=>'numeric')),
                          new GreaterThan(0),
                          new Range(array('min'=>0,'max'=>4000000000.9999)),
                          new Regex(array('pattern'=>'/^[0-9]*+(.{0,1}[0-9]{0,4})$/', 'message'=>'Your number must not contain more than four decimal points'))
                    )
               )
          )
    ->add('price',
           NumberType::class,
           array('constraints'=>
                     array(new NotBlank(),
                           new Type(array('type'=>'numeric')),
                           new GreaterThan(0),
                           new Range(array('min'=>0,'max'=>4000000000.99)),
                           new Regex(array('pattern'=>'/^[0-9]*+(.{0,1}[0-9]{0,2})$/', 'message'=>'Your number must not contain more than two decimal points'))
                    )
                )
            );

除了一小部分细节外,我对此代码没有任何问题。我无法找到一种方法来自定义Valid()表单字段下的items约束所提供的验证错误消息。子表单和父表单的所有其他验证错误都会使用相应的表单字段正确显示,并且能够执行我希望的任何操作。

  

我注意到的另一件事是Valid()约束在提交表单时没有This collection should contain 1 element or more.时返回验证错误items。据我所知,验证错误属于Count()约束,所以如果没有使用Count()约束,它是如何出现的?如果我假设Valid()约束在Count()表单字段内部执行CollectionType,那么Valid()使用的其他约束是什么?我在哪里可以自定义Valid()抛出的这些消息?

     

我正在寻找的解决方案不能涉及在实体类中使用验证约束

1 个答案:

答案 0 :(得分:0)

您可以使用YAML验证来自定义错误消息。但是,您需要适当地注册此文件,然后在其中定义约束。这可以在验证配置中完成(参见文档)

请参阅我提供的示例代码,以帮助您入门。

# src/Acme/BlogBundle/Resources/config/validation.yml
Acme\BlogBundle\Entity\Author:
    properties:
        price:
            - NotBlank: 
                message: 'Price is mandatory, and so may not be blank'
            - Range:
                min: 0
                max: 4000000000.99
                minMessage: "It does not make any sense to sell a product for a price lower than 0"
                maxMessage: "The price may not be more than {{ limit }}"

参考:http://symfony.com/doc/current/validation.html