Дата обновления перевода 2021-09-29

Unique

Валидирует, что все элементы заданной коллекции являются уникальными (ни один из них не присутствует больше, чем единожды). По умолчанию, элементы сравниваются строго, поэтому '7' и 7 считаются разными элементами (строка и цифра, соответственно). Если вы хотите применить другую логику сравнения, используйте опцию normalizer.

See also

Если вы хотите применить другие ограничения валидации к элементам коллекции, или хотите убедиться, что присутствуют определенные ключи коллекции, используйте Collection constraint.

See also

Если вы хотите валидировать, что значение свойства сущности является уникальным среди всех сущностей одного типа (например, электронный адрес регистрации среди всех пользователей), используйте ограничение UniqueEntity.

Применяется свойство или метод
к опциям
Класс Unique
Валидатор UniqueValidator

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

Это ограничение может быть применено к любому свойству типа array или \Traversable. В следующем примере, $contactEmails является массивом строк:

  • Annotations
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    // src/Entity/Person.php
    namespace App\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Person
    {
        /**
         * @Assert\Unique
         */
        protected $contactEmails;
    }
    
  • Attributes
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    // src/Entity/Person.php
    namespace App\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Person
    {
        #[Assert\Unique]
        protected $contactEmails;
    }
    
  • YAML
    1
    2
    3
    4
    5
    # config/validator/validation.yaml
    App\Entity\Person:
        properties:
            contactEmails:
                - Unique: ~
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    <!-- config/validator/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping https://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="App\Entity\Person">
            <property name="contactEmails">
                <constraint name="Unique"/>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    // src/Entity/Person.php
    namespace App\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    
    class Person
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('contactEmails', new Assert\Unique());
        }
    }
    

Опции

groups

type: array | string

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

message

тип: string по умолчанию: Эта коллекция должна содержать только уникальные элементы.

Это сообщение будет отображено, если хотя бы один элемент в коллекции будет повторяться.

Вы можете использовать следующие параметры в сообщении:

Параметр Описание
{{ value }} Текущее значение (invalid)

normalizer

тип: PHP-вызываемое по умолчанию: null

New in version 5.3: Опция normalizer была представлена в Symfony 5.3.

Эта опция определяет PHP-вызываемое, применимое к каждому элементу заданной коллекции, до проверки валидности коллекции.

Например, вы можете передать строку 'trim', чтобы применить PHP-функцию trim к каждому элементу коллекции, для того, чтобы игнорировать пробелы в начале и конце во время валидации.

payload

type: mixed default: null

This option can be used to attach arbitrary domain-specific data to a constraint. The configured payload is not used by the Validator component, but its processing is completely up to you.

For example, you may want to use several error levels to present failed constraints differently in the front-end depending on the severity of the error.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.