2015-07-10 72 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