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
如果不能解决问题,请查看您的模板。那里也可以设置..
我正在尝试覆盖 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
如果不能解决问题,请查看您的模板。那里也可以设置..