Unique
ΠΠ°ΡΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° 2025-07-27
Unique
ΠΠ°Π»ΠΈΠ΄ΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ (Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ·
Π½ΠΈΡ
Π½Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ). ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ
ΡΡΡΠΎΠ³ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ '7' ΠΈ 7 ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ (ΡΡΡΠΎΠΊΠ° ΠΈ ΡΠΈΡΡΠ°,
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ). ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π΄ΡΡΠ³ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
ΠΎΠΏΡΠΈΡ normalizer.
See also
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, ΠΈΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΊΠ»ΡΡΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Collection constraint.
See also
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²Π°Π»ΠΈΠ΄ΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΡΡΠ½ΠΎΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ ΡΡΠ΅Π΄ΠΈ Π²ΡΠ΅Ρ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π΄ΠΈ Π²ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ UniqueEntity.
| ??????????? ? | ???????? ??? ?????? |
| ????? | Unique |
| ????????? | UniqueValidator |
ΠΠ°Π·ΠΎΠ²ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΎ ΠΊ Π»ΡΠ±ΠΎΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Ρ ΡΠΈΠΏΠ° array ΠΈΠ»ΠΈ
\Traversable. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, $contactEmails ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ
ΡΡΡΠΎΠΊ:
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 array $contactEmails;
}
ΠΠΏΡΠΈΠΈ
fields
ΡΠΈΠΏ: array | string
ΠΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠ»ΡΡ ΠΈΠ»ΠΈ ΠΊΠ»ΡΡΠΈ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π΄ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π²ΡΠ΅ ΠΊΠ»ΡΡΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ Π½Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΠΎΠ»Ρ
latitude, longitude ΠΈ label. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅
ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠ»ΡΠΊΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠ² ΠΎΠΏΡΠΈΡ fields, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΡΠ°Π²ΠΈΡΡΡ
Π΄ΠΎΠ»Π³ΠΎΡΡ+ΡΠΈΡΠΎΡΡ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ:
1 2 3 4 5 6 7 8 9 10
// src/Entity/PointOfInterest.php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class PointOfInterest
{
#[Assert\Unique(fields: ['latitude', 'longitude'])]
protected array $coordinates;
}
ΠΠ°ΡΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° 2023-09-24
groups
ΡΠΈΠΏ: array | string ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: null
ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π³ΡΡΠΏΠΏΡ ΠΈΠ»ΠΈ Π³ΡΡΠΏΠΏΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ. ΠΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ Π³ΡΡΠΏΠΏΠ°Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ.
errorPath
ΡΠΈΠΏ: string ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: null
7.2
ΠΠΏΡΠΈΡ errorPath Π±ΡΠ»Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² Symfony 7.2.
ΠΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊ
ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΡ ΠΎΠΏΡΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΊ
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ»Ρ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ.
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΎΠΏΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠΉ Π²Π°Π»ΠΈΠ΄Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ PropertyAccess
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 'point_of_interest', 'user.email').
message
ΡΠΈΠΏ: string ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: ΠΡΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ.
ΠΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΎ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ:
| ???????? | ???????? |
|---|---|
{{ value }} |
??????? ???????? (invalid) |
normalizer
ΡΠΈΠΏ: PHP-Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: null
ΠΡΠ° ΠΎΠΏΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ PHP-Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ΅, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΠ΅ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, Π΄ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΡΠΎΠΊΡ 'trim', ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ PHP-ΡΡΠ½ΠΊΡΠΈΡ
trim ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ
ΠΏΡΠΎΠ±Π΅Π»Ρ Π² Π½Π°ΡΠ°Π»Π΅ ΠΈ ΠΊΠΎΠ½ΡΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ.
ΠΠ°ΡΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° 2025-07-27
payload
ΡΠΈΠΏ: mixed ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: null
ΠΡΠ° ΠΎΠΏΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π°, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ Π΄ΠΎΠΌΠ΅Π½Ρ. Π‘ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π½Π°Π³ΡΡΠ·ΠΊΠ° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ ΠΠ°Π»ΠΈΠ΄Π°ΡΠΎΡ, Π½ΠΎ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π°Ρ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Ρ ΠΎΡΠ΅ΡΡ ΠΈΡΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π² ΡΡΠΎΠ½Ρ-ΡΠ½Π΄Π΅ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ.
stopOnFirstError
ΡΠΈΠΏ: boolean ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: true
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π½Π°ΡΡΡΠ΅Π½ΠΈΠΈ. ΠΡΠ»ΠΈ ΡΡΠ° ΠΎΠΏΡΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°
ΠΊΠ°ΠΊ false, Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ
ConstraintViolation.
By default, this constraint stops at the first violation. If this option is set
to false, validation continues on all elements and returns all detected
ConstraintViolation objects.
7.3
ΠΠΏΡΠΈΡ stopOnFirstError Π±ΡΠ»Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² Symfony 7.3.