我試圖重寫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