Правило PasswordStrength
Правило PasswordStrength относится к группе
ограничений (constraints) и вешается на свойство
сущности или на поле формы. Оно проверяет,
что пароль соответствует заданным требованиям
безопасности: минимальной длине, наличию букв
в обоих регистрах, цифр и специальных символов.
Первым параметром передаётся массив опций,
среди которых можно указать минимальную длину,
минимальное количество символов каждого типа
и сообщение об ошибке.
Синтаксис
#[Assert\PasswordStrength(
minLength: 8,
minLowercase: 1,
minUppercase: 1,
minDigits: 1,
minSpecialChars: 1,
message: '...'
)]
Пример
Давайте создадим сущность User
со свойством password и повесим
на него правило PasswordStrength:
<?php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class User
{
#[Assert\PasswordStrength(
minLength: 8,
minLowercase: 1,
minUppercase: 1,
minDigits: 1,
minSpecialChars: 1
)]
private string $password;
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getPassword(): string
{
return $this->password;
}
}
?>
Пример
Давайте проверим пароль 'abcde'
с помощью валидатора:
<?php
namespace App\Controller;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class UserController extends AbstractController
{
#[Route('/user/validate', name: 'user_validate')]
public function validate(ValidatorInterface $validator): Response
{
$user = new User();
$user->setPassword('abcde');
$errors = $validator->validate($user);
if (count($errors) > 0) {
return new Response((string) $errors);
}
return new Response('password is valid');
}
}
?>
Результат выполнения кода:
Object(App\Entity\User).password: This value is too short. It should have 8 characters or more.
Пример
Давайте проверим пароль 'Abcde123!',
который соответствует всем требованиям:
<?php
namespace App\Controller;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class UserController extends AbstractController
{
#[Route('/user/validate', name: 'user_validate')]
public function validate(ValidatorInterface $validator): Response
{
$user = new User();
$user->setPassword('Abcde123!');
$errors = $validator->validate($user);
if (count($errors) > 0) {
return new Response((string) $errors);
}
return new Response('password is valid');
}
}
?>
Результат выполнения кода:
"password is valid"
Смотрите также
-
правило
NotCompromisedPassword,
которое проверяет, что пароль не был скомпрометирован -
правило
Length,
которое задаёт минимальную и максимальную длину строки -
правило
Regex,
которое проверяет строку по регулярному выражению -
класс
Form,
который представляет форму и управляет её полями