Symfony 4: как переопределить проверку Fosuserbundle? - PullRequest
0 голосов
/ 08 октября 2018

Я использую Symfony 4 и пытаюсь переопределить Fosuserbundle validation.xml, создав новый файл validation.xml в config / validator /, но он не работает.Он всегда использует файл validation.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, значение, которое определяется в валидации Fosuserbundle по умолчанию.xml.

Кто-нибудь знает, как это сделать?Документация не очень ясна и не обновлена ​​о Fosuserbundle с Symfony 4.

Спасибо.

1 Ответ

0 голосов
/ 09 октября 2018

Решение, похоже, использует

<class name="App\Entity\User">

вместо

<class name="FOS\UserBundle\Model\User">

в config / validator / validation.xml .Действительно, " App \ Entity \ User " - это класс User, определенный в config / packages / fos_user.yaml .

Тем не менее, validation.xml, похоже, неработать с полями, такими как email или plainPassword, для которых minLength (например) не применяется.

<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>

Это верно даже для стандартного validation.xml файла Fosuserbundle, который определяет ограничения, которые не учитываются приоформляется регистрационная форма.Я решил эту проблему, установив ограничения непосредственно в форме веточки, которая переопределяет форму fosuserbundle.

Надеюсь, это поможет.Если у вас есть какое-либо другое решение, не стесняйтесь опубликовать его.

...