Compound

Дата обновления перевода 2023-01-14

Compound

В отличие от других ограничений, это ограничение не может быть использовано само по себе. Вместо этого, оно позволяет вам создать собственный набор повторно используемых ограничений, представляющих собой правила для постоянного использования в вашем приложении, расширяя ограничение.

??????????? ? ?????? ??? ???????? ??? ??????
????? Compound
????????? CompoundValidator

Базовое использование

Представьте, что у вас есть разные места, где должен валидироваться пароль пользователя, вы можете создать соственный именованный набор требований, чтобы он постоянно использовался везде:

  • Attributes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// src/Validator/Constraints/PasswordRequirements.php
namespace App\Validator\Constraints;

use Symfony\Component\Validator\Constraints\Compound;
use Symfony\Component\Validator\Constraints as Assert;

#[\Attribute]
class PasswordRequirements extends Compound
{
    protected function getConstraints(array $options): array
    {
        return [
            new Assert\NotBlank(),
            new Assert\Type('string'),
            new Assert\Length(['min' => 12]),
            new Assert\NotCompromisedPassword(),
        ];
    }
}

Добавьте #[\Attribute] к классу ограничения, если вы хотите использовать его в качестве аннотации/атрибута в других классах. Если ограничение имеет опции конфигурации, определите их в качестве публичных свойств в классе ограничения.

Теперь вы можете использовать его везде, где вам нужно:

  • Attributes
  • YAML
  • XML
  • PHP
1
2
3
4
5
6
7
8
9
10
// src/Entity/User.php
namespace App\Entity\User;

use App\Validator\Constraints as Assert;

class User
{
    #[Assert\PasswordRequirements]
    public $plainPassword;
}

Опции

groups

type: array | string

It defines the validation group or groups of this constraint. Read more about validation groups.

payload

тип: mixed по умолчанию: null

Эта опция может быть использована, чтобы добавить к ограничению произвольные данные, относящиеся к домену. Сконфигурированная нагрузка не используется компонентом Валидатор, но его обработка полностью зависит от вас.

Например, вы можете захотеть исользовать несколько уровней ошибок, чтобы представить неудачные ограничения в фронт-энде по-разному, в зависимости от степени сложности ошибки.