FOSUserBundle - проверка полей имени пользователя, пароля или электронной почты
В FOUserBundle я хотел бы иметь возможность изменять параметры проверки минимальной длины, максимальной длины и не пустые поля, такие как имя пользователя и пароль.
Мне удалось выполнить некоторую проверку с помощью @Assert
в моих настраиваемых полях, но теперь мне интересно, как я могу изменить проверку имени пользователя для FOSUserBundle?
Эти поля генерируются автоматически, поэтому я не могу добавить их в свой объект User
... и по умолчанию он позволяет использовать символы типа {^|
и т.д., которые не выглядят хорошо.
Ответы
Ответ 1
Вы можете перезаписать настройки по умолчанию, создав новый файл проверки в своем комплекте. Это наследование пакетов. Просто скопируйте (не вырезайте).
FOSUserBundle/Resources/config/validation/orm.xml
до YourBundle/Resources/config/validation/orm.xml
.
(couchdb.xml
, mongodb.xml
, propel.xml
соответственно)
и настройте его на свои нужды. Измените имя класса, затем добавьте ограничения:
<class name="Vendor\YourBundle\Model\User">
<property name="username">
<!-- minimum length for username -->
<constraint name="MinLength">
<option name="limit">3</option>
<option name="message">Your name must have at least {{ limit }} characters.</option>
</constraint>
<!-- custom constraint -->
<constraint name="Acme\DemoBundle\Validator\Constraints\ContainsAlphanumeric" />
</property>
<constraint name="Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity">
<option name="fields">usernameCanonical</option>
<option name="errorPath">username</option>
<option name="message">fos_user.username.already_used</option>
<option name="groups">
<value>Registration</value>
<value>Profile</value>
</option>
</constraint>
<constraint name="Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity">
<option name="fields">emailCanonical</option>
<option name="errorPath">email</option>
<option name="message">fos_user.email.already_used</option>
<option name="groups">
<value>Registration</value>
<value>Profile</value>
</option>
</constraint>
</class>
Подробнее о доступных ограничениях (и о том, как их использовать с конфигурацией xml) в Ссылка на ограничения проверки.
Ответ 2
Самое легкое для меня было переписать свойство в моей настраиваемой сущности и изменить настройки для утверждения:
<?php
namespace YourBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class User extends \FOS\UserBundle\Model\User
{
// ...
/**
* @Assert\Length(
* min=8,
* max=4096,
* minMessage="user.password.short",
* groups={"Profile", "ResetPassword", "Registration", "ChangePassword"}
* )
*/
protected $plainPassword;
// ...
}
Не забывайте о группах проверки.
Heads up: user.password.short
перевод находится в домене validators
вашего пакета в YourBundle\Resources\translations\
.
Пример:
# validators.en.yml
user:
password:
short: Password must be at least 8 characters long.
Не знаю, зависит ли это от версии; Я использую symfony v2.8.3 и fosuser [email protected] (a39d000).
Ответ 3
В YML вы сделаете так:
# src/Acme/ProjectBundle/Resources/config/validation.yml
Acme\ProjectBundle\Entity\User:
properties:
email:
- Length:
min: 5
minMessage: "Your email must have at least {{ limit }} characters."
max: 255
maxMessage: "Your email is too long."
- NotBlank:
message: "Please enter an email"
username:
- Length:
min: 6
minMessage: "Your username must have at least {{ limit }} characters."
max: 255
maxMessage: "Your username is too long."
- NotBlank:
message: "Please enter an username"
plainPassword:
- Length:
min: 8
minMessage: "Your password must have at least {{ limit }} characters."
max: 255
maxMessage: "Your password is too long."
- NotBlank:
message: "Please enter a password"
Acme\ProjectBundle\Form\Model\ChangePassword:
properties:
new:
- Length:
min: 8
minMessage: "Your password must have at least {{ limit }} characters."
max: 255
maxMessage: "Your password is too long."
- NotBlank:
message: "Please enter a password"
Acme\ProjectBundle\Form\Model\ResetPassword:
properties:
new:
- Length:
min: 8
minMessage: "Your password must have at least {{ limit }} characters."
max: 255
maxMessage: "Your password is too long."
- NotBlank:
message: "Please enter a password"