Valid

Дата оновлення перекладу 2024-05-29

Valid

Це обмеження використовується, щоб включити валідацію в обʼєктах, які вбудовані в якості властивостей в обʼєкт, який валідується. Це дозволяє вам валідувати обʼєкт та всі підобʼєкти, асоційовані з ним.

?????????????? ?? ??????????? ??? ??????
???? Valid

Дата оновлення перекладу 2022-12-21

Tip

За замовчуванням, опція error_bubbling включена для типу поля collection, що передає помилки батьківській формі. Якщо ви хочете прикріпити помилки до локацій, де вони відбуваються, вам потрібно встановити error_bubbling як false.

Базове застосування

У наступному прикладі, створіть два класи: Author і Address, обидва з яких мають обмеження у своїх властивостях. Більш того, Author зберігає екземпляр Address у властивості $address:

1
2
3
4
5
6
7
8
9
// src/Entity/Address.php
namespace App\Entity;

class Address
{
    protected string $street;

    protected string $zipCode;
}
1
2
3
4
5
6
7
8
9
10
11
// src/Entity/Author.php
namespace App\Entity;

class Author
{
    protected string $firstName;

    protected string $lastName;

    protected Address $address;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// src/Entity/Address.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Address
{
    #[Assert\NotBlank]
    protected string $street;

    #[Assert\NotBlank]
    #[Assert\Length(max: 5)]
    protected string $zipCode;
}

// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\NotBlank]
    #[Assert\Length(min: 4)]
    protected string $firstName;

    #[Assert\NotBlank]
    protected string $lastName;

    protected Address $address;
}

З таким мапуванням, можливо успішно валідувати автора з невалідною адресою. Щоб уникнути цього, додайте обмеження Valid до властивості $address.

1
2
3
4
5
6
7
8
9
10
// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\Valid]
    protected Address $address;
}

Якщо ви валідуєте автора з невалідною адресою тепер, ви можете побачити, що валідація полів Address зазнає невдачі.

1
2
App\Entity\Author.address.zipCode:
    Це значення занадто довге. Воно має містити 5 символів або менше.

Tip

Якщо ви також хочете валідувати, що властивість address є екземпляром класу App\Entity\Address, додайте обмеження Type.

Опції

Дата оновлення перекладу 2023-09-24

groups

тип: array | string за замовчуванням: null

Визначає групу або групи валідації обмеження. Прочитайте більше про групи валідації.

Note

На відміну від інших обмежень, обмеження Valid не використовує групу Default. Це означає, що воно завжди буде застосовуватися за замовчуванням, навіть якщо ви вказали групу при виклику валідатора. Якщо ви хочете обмежити обмеження підмножиною груп, вам слід визначити опцію groups.

Дата оновлення перекладу 2024-05-29

payload

тип: mixed за замовчуванням: null

Ця опція може бути використана, щоб додати довільні дані, специфічні для домену, до обмеження. Сконфігуроване корисне навантаження не використовується компонентом Validator, але його обробка повністю залежить від вас.

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

traverse

тип: boolean за замовчуванням: true

Якщо це обмеження застосовується до \Traversable, тоді всі значення, що містять це, будуть валідовані, якщо ця опція встановлена як true. Ця опція ігнорується у масивах: масиви траверсуються у будь-якому випадку. Ключі не валідуються.