我使用Symfony 4,我尝试通过在config / validator /中创建一个新的validate.xml文件来覆盖Fosuserbundlevalidation.xml,但是它不起作用。它总是使用默认的validate.xml,而不是我创建的默认XML。
我想更改用户注册的验证约束。
config / packages / fos_user.yaml
fos_user:
db_driver: orm
firewall_name: main
user_class: App\Entity\User
from_email:
address: "test@domain.com"
sender_name: "test@domain.com"
registration:
form:
type: FOS\UserBundle\Form\Type\RegistrationFormType
name: fos_user_registration_form
validation_groups: [RegistrationValidation]
config / packages / framework.yaml
framework:
secret: '%env(APP_SECRET)%'
csrf_protection: true
validation: { enabled: true }
...
config / validator / validation.xml
<?xml version="1.0" ?>
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping
http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
<class name="FOS\UserBundle\Model\User">
<property name="username">
<constraint name="NotBlank">
<option name="message">fos_user.username.blank</option>
<option name="groups">
<value>RegistrationValidation</value>
</option>
</constraint>
<constraint name="Length">
<option name="min">4</option>
<option name="minMessage">fos_user.username.short</option>
<option name="max">180</option>
<option name="maxMessage">fos_user.username.long</option>
<option name="groups">
<value>RegistrationValidation</value>
</option>
</constraint>
</property>
</class>
我创建了一个名为RegistrationValidation的新验证组。
如您在上面的示例中看到的,我尝试在4个角色上设置用户名的最小长度,但始终将2作为最小长度,这是默认Fosuserbundlevalidation.xml中定义的值。 / p>
有人知道该怎么做吗?关于Fosuserbundle和Symfony 4的文档不是很清楚,也不是最新的。
谢谢。
答案 0 :(得分:0)
该解决方案似乎正在使用
<class name="App\Entity\User">
代替
<class name="FOS\UserBundle\Model\User">
在 config / validator / validation.xml 中。实际上,“ App \ Entity \ User ”是在 config / packages / fos_user.yaml 中定义的User类。
尽管如此,validation.xml似乎不适用于未应用minLength(例如)的电子邮件或plainPassword等字段。
<property name="plainPassword">
<constraint name="NotBlank">
<option name="message">fos_user.password.blank</option>
<option name="groups">
<value>RegistrationValidation</value>
</option>
</constraint>
<constraint name="Length">
<option name="min">6</option>
<option name="minMessage">fos_user.password.short</option>
<option name="groups">
<value>RegistrationValidation</value>
</option>
</constraint>
</property>
使用Fosuserbundle的默认validation.xml甚至是正确的,它定义了呈现注册表时不会考虑的约束。我通过直接在细枝表单中设置约束来解决此问题,这些约束覆盖了fosuserbundle的约束。
希望这会有所帮助。如果您有其他解决方案,请随时发布。