2015-07-10 70 views
0

我试图重写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 } 

回答

0

您应该手动将最大长度的HTML属性添加到该字段。 验证对HTML属性没有影响。

buildForm @的appbundle \表格\ RegistrationFormType

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

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

如果它不解决这个问题,看看你的模板。它可以在那里设置好的太..

+0

抱歉晚答复。验证对HTML属性没有影响是不正确的。如果没有提供特定的HTML属性,Symfony2会根据验证约束尝试猜测它们。我只是以为我做错了什么。尽管这种行为没有记录。我想过要从控制器或模板中添加字段,但我希望能以更文明的方式解决这个问题。我会使用您的解决方案,因为这是我能想到的最佳解决方案。 – Agedan

+0

你能告诉我由Symfony猜测的HTML属性在哪里吗?我从来没有见过,我真的很好奇。 – SadAir

+0

你说得对,我已经做了一些研究。它由ValidatorTypeGuesser完成。 [链接](https://github.com/symfony/Form/blob/master/Extension/Validator/ValidatorTypeGuesser.php)。 对不起,我不依赖于形式猜测。 然后,也许你应该清除缓存来应用你的验证配置的变化? – SadAir