Compound
Дата обновления перевода 2025-07-25
Compound
В отличие от других ограничений, это ограничение не может быть использовано само по себе. Вместо этого, оно позволяет вам создать собственный набор повторно используемых ограничений, представляющих собой правила для постоянного использования в вашем приложении, расширяя ограничение.
| ??????????? ? | ?????? ??? ???????? ??? ?????? | 
| ????? | Compound | 
| ????????? | CompoundValidator | 
Базовое использование
Представьте, что у вас есть разные места, где должен валидироваться пароль пользователя, вы можете создать соственный именованный набор требований, чтобы он постоянно использовался везде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// 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(),
            new Assert\PasswordStrength(minScore: 4),
        ];
    }
}
    Добавьте  #[\Attribute] к классу ограничения, если вы хотите
использовать его в качестве аннотации/атрибута в других классах. Если ограничение имеет
опции конфигурации, определите их в качестве публичных свойств в классе ограничения.
Теперь вы можете использовать его везде, где вам нужно:
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 string $plainPassword;
}
    Группы валидации и полезная нагрузка могут быть переданы через конструктор:
1 2 3 4 5 6 7 8 9 10 11 12 13
// src/Entity/User.php
namespace App\Entity\User;
use App\Validator\Constraints as Assert;
class User
{
    #[Assert\PasswordRequirements(
        groups: ['registration'],
        payload: ['severity' => 'error'],
    )]
    public string $plainPassword;
}
    7.2
Поддержка передачи групп валидации и полезной нагрузки конструктору
класса Compound была представлена в Symfony 7.2.
Опции
Дата обновления перевода 2023-09-24
groups
тип: array | string по умолчанию: null
Определяет группу или группы валидации ограничений. Прочитайте больше о группах валидации.
Дата обновления перевода 2025-07-27
payload
тип: mixed по умолчанию: null
Эта опция может быть использована, чтобы добавить к ограничению произвольные данные, относящиеся к домену. Сконфигурированная нагрузка не используется компонентом Валидатор, но его обработка полностью зависит от вас.
Например, вы можете захотеть исользовать несколько уровней ошибок, чтобы представить неудачные ограничения в фронт-энде по-разному, в зависимости от степени сложности ошибки.