Я хочу знать, как проверить произвольный пароль на соответствие правилам проверки, определенным в validation.xml
, Я создал страницу администратора, где пользователи-администраторы могут создавать других пользователей-администраторов. Я хочу проверить этих пользователей, используя те же правила, которые используются, когда анонимные пользователи регистрируются в своей учетной записи на /register
стр. Из того, что я вижу, эти правила определены в validation.xml
,
В общем, я хочу сделать что-то вроде этого:
$userManager = $container->get('fos_user.user_manager');
$user = $userManager->createUser();
$user->setPlainPassword('1');
$arrayOfErrors = functionThatValidatesUserPassword($user);
или даже вызвать функцию с паролем, например, так:
$arrayOfErrors = functionThatValidatesUserPassword('1');
Что я должен использовать, чтобы заменить functionThatValidatesUserPassword
Вот?
Я думал, что служба валидатора может работать, но когда я пытаюсь
$validator = $this->get('validator');
$errors = $validator->validate($user);
print_r($errors);exit;
Я просто получаю пустой список ошибок. Я ожидал увидеть сообщение об ошибке «Пароль слишком короткий», что вы получите, если зарегистрируетесь с тем же паролем на /register
стр.
Я использую Symfony 3.4 и FosUserBundle 2.0.
При поиске ответов на мой вопрос я обнаружил следующие два поста, описывающие, как переопределить правила, определенные в validation.xml
файл.
Я планирую переопределить правила проверки, но сейчас я просто хочу подтвердить свой пароль, используя встроенные правила, которые поставляются с FosUserBundle.
Я нашел ответ на мою проблему. Ограничения во встроенном validation.xml файла FOSUserBundle принадлежат группы проверки. По умолчанию validate
Функция проверяет только те ограничения, которые не принадлежат ни к одной группе. Существует третий параметр validate
функция, которая принимает массив групп, содержащих ограничения, которые вы хотите проверить. Поэтому все, что вам нужно сделать, это передать группы, которые содержат ограничения, которые вы хотите проверить. Например, поле пароля относится к следующим группам: Регистрация, Профиль, ResetPassword, ChangePassword. Я использовал группу регистрации, поэтому мой код выглядит так:
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->createUser();
$user->setPlainPassword('1');
$validator = $this->get('validator', null, array("Registration"));
$errors = $validator->validate($user);
Других решений пока нет …