Valid

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

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
// src/Entity/Address.php
namespace App\Entity;

class Address
{
    protected $street;
    protected $zipCode;
}
1
2
3
4
5
6
7
8
9
// src/Entity/Author.php
namespace App\Entity;

class Author
{
    protected $firstName;
    protected $lastName;
    protected $address;
}
  • Attributes
  • YAML
  • XML
  • PHP
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 $street;

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

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

use Symfony\Component\Validator\Constraints as Assert;

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

    #[Assert\NotBlank]
    protected $lastName;

    protected $address;
}

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

  • Attributes
  • YAML
  • XML
  • PHP
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 зазнає невдачі.

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

Tip

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

Опції

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

groups

тип: array | string

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

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

payload

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

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

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

traverse

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

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