Symfony2 覆盖包 HTML 表单输入约束

Symfony2 overriding bundle HTML form input constraints

我正在尝试覆盖 FOSUserBundle 的最大用户名长度。看起来很简单,但我做不到。

validation.yml

AppBundle\Entity\User:
    properties:
        username:
            - Length: { max: 5, groups: [CustomRegistration] }

config.yml

fos_user:
    [...]
    user_class: AppBundle\Entity\User
    registration:
        form:
            validation_groups: [CustomRegistration]

验证本身工作正常。如果用户提供的用户名长度超过 5 个字符,Symfony 会显示一个错误,指出用户名不应超过 5 个字符。问题是 HTML 表单输入仍然使用默认的 FOSUserBundle 值 (255)。表单生成器似乎完全忽略了验证组。有什么方法可以让表单生成器使用我的约束吗?

我想提一下,当我使用 XML 格式时,HTML 验证有效,但我需要使用 YAML,它只是巧合,所以我不想依赖这种怪癖。

我也尝试提供自定义类型,希望它能改变任何东西,但它没有。用户名输入仍然使用最大长度值255。供参考:

getDefaultOptions @AppBundle/Form/RegistrationFormType.php

public function getDefaultOptions(array $options)
{
    return [
        'data_class'        => 'AppBundle\Entity\User',
        'validation_groups' => ['Default', 'CustomRegistration']
    ];
}

config.yml

fos_user:
    [...]
    user_class: AppBundle\Entity\User
    registration:
        form:
            type: appbundle_registration

services.yml

services:
    appbundle.registration.form.type:
        class: AppBundle\Form\RegistrationFormType
        tags:
            - { name: form.type, alias: appbundle_registration }

您应该手动将 max-length HTML 属性添加到该字段。 验证对 HTML 属性没有影响。

buildForm @ AppBundle\Form\RegistrationFormType

$builder->add("username", "text", array("attr" => array("maxlength" => "5")));

参见:http://symfony.com/doc/current/reference/forms/types/text.html#max-length

如果不能解决问题,请查看您的模板。那里也可以设置..