Symfony 2验证消息被默认验证覆盖


Symfony 2 validation message getting overwritten by default validation

在Symfony 2中,我有一个要验证的名称字段。如果它包含一个数字,我想显示一条消息。我的代码是:

//Entity/Product.php
 /**
     * @ORM'Column(name="`name`", type="string", length=255)
     * @Assert'NotBlank()
     * @Assert'NotNull()
     * @Assert'Regex(pattern="/[0-9]/",match=false,message="Your name cannot contain a number")
     */
    protected $name;

但当我在字段中写一个数字时,我会看到这样的信息:

请匹配请求的格式

因为我的字段代码如下:

<input type="text" id="mzm_testbundle_category_name" name="mzm_testbundle_category[name]" required="required" maxlength="255" pattern="((?![0-9]).)*">

input标签有一个模式,我看到的错误来自HTML5。我该如何解决这个问题?

您看到的消息不是直接来自Symfony验证器。表单框架在可能的情况下定义HTML验证,并且消息确实来自客户端验证。

覆盖客户端消息

约束API的setCustomValidity()可用于更新客户端消息。

您可以在定义字段时执行此操作:

$builder->add(
    'name',
    'text',
    [
        'attr' => [
            'oninvalid' => "setCustomValidity('Your name cannot contain a number')"
        ]
    ]
));

或在树枝模板中:

{{ form_row(
       form.name, 
       {
           'attr': {
               'oninvalid': "setCustomValidity('Your name cannot contain a number')"
           } 
       }
 ) }}

禁用客户端验证

您也可以禁用HTML验证:

{{ form(form, {'attr': {'novalidate': 'novalidate'}}) }}

参考

  • 如何更改或删除HTML5表单验证默认错误消息
  • 覆盖symfony2上的表单验证消息
  • HTML5表单必需属性。是否设置自定义验证消息
  • Symfony2禁用HTML5表单验证