我试图重写FOSUserBundle的最大用户名长度。似乎很简单,但我无法做到这一点。Symfony2的首要束HTML表单输入限制
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格式,但我需要使用YAML,它只是巧合的作品,所以我不希望依靠这样的怪癖,HTML验证工作。
我也试图提供定制型的,希望它会改变什么,但事实并非如此。用户名输入仍然采用的255最大长度值作为参考:
getDefaultOptions @的appbundle /形式/ 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 }
抱歉晚答复。验证对HTML属性没有影响是不正确的。如果没有提供特定的HTML属性,Symfony2会根据验证约束尝试猜测它们。我只是以为我做错了什么。尽管这种行为没有记录。我想过要从控制器或模板中添加字段,但我希望能以更文明的方式解决这个问题。我会使用您的解决方案,因为这是我能想到的最佳解决方案。 – Agedan
你能告诉我由Symfony猜测的HTML属性在哪里吗?我从来没有见过,我真的很好奇。 – SadAir
你说得对,我已经做了一些研究。它由ValidatorTypeGuesser完成。 [链接](https://github.com/symfony/Form/blob/master/Extension/Validator/ValidatorTypeGuesser.php)。 对不起,我不依赖于形式猜测。 然后,也许你应该清除缓存来应用你的验证配置的变化? – SadAir