Завантаження джерел
Дата оновлення перекладу 2024-04-30
Завантаження джерел
Компонент Validator використовує метадані для валідації значення. Ці метадані визначають, як клас, масив або будь-яке інше значення, повинні бути валідовані. При валідації класу, метадані визначаються самим класом. При валідації простого значення, метадані повинні бути передані методам валідації.
Метадані класу можуть бути визначені у файлі конфігурації або самому класі. Компонент Валідатор збирає ці метадані, використовуючи набір завантажувачів.
See also
Ви дізнаєтеся, як визначати метадані, у Метадані.
StaticMethodLoader
Найбазовішим завантажувачем є StaticMethodLoader. Цей завантажувач отримує метадані шляхом виклику статичного методу класу. Імʼя методу конфігурується з використанням методу addMethodMapping() конструктора валідатора:
1 2 3 4 5
use Symfony\Component\Validator\Validation;
$validator = Validation::createValidatorBuilder()
->addMethodMapping('loadValidatorMetadata')
->getValidator();
У цьому прикладі, метадані валідації вилучаються шляхом виконання
методу класу loadValidatorMetadata()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Mapping\ClassMetadata;
class User
{
protected string $name;
public static function loadValidatorMetadata(ClassMetadata $metadata): void
{
$metadata->addPropertyConstraint('name', new Assert\NotBlank());
$metadata->addPropertyConstraint('name', new Assert\Length([
'min' => 5,
'max' => 20,
]));
}
}
Tip
Замість того, щоб декілька разів викликати addMethodMapping()
для
додавання декілької імен методу, ви можете також використати
addMethodMappings(),
щоб встановити масив підтримуваних імен методів.
Завантажувачі файлів
Компонент також надає два завантажувачі файлів, один для завантаження YAML файлів, а інший - для XML файлів. Використайте addYamlMapping() або addXmlMapping(), щоб сконфігурувати розташування цих файлів:
1 2 3 4 5
use Symfony\Component\Validator\Validation;
$validator = Validation::createValidatorBuilder()
->addYamlMapping('config/validation.yaml')
->getValidator();
Note
Якщо ви хочете завантажувати файли відображення YAML, то вам також знадобиться встановити компонент Yaml.
Tip
Так само, як і з відображенням методу, ви можете використати addYamlMappings() і addXmlMappings(), щоб сконфігурувати масив шляхів файлів.
AttributeLoader
Компонент надає AttributeLoader для отримання метаданих з атрибутів класу. Наприклад:
1 2 3 4 5 6 7 8
use Symfony\Component\Validator\Constraints as Assert;
// ...
class User
{
#[Assert\NotBlank]
protected string $name;
}
Щоб увімкнути цей завантажувач атрибута, викличте метод enableAttributeMapping().
Щоб відключити завантажувач анотації після його підключення, викличте disableAttributeMapping().
Використання декількох завантажувачів
Компонент також надає клас LoaderChain для послідовного виконання декількох завантажувачів у тому ж порядку, в якому вони були визначені:
ValidatorBuilder
вже попіклувався про це, коли ви сконфігуруєте
декілька відображень:
1 2 3 4 5 6 7
use Symfony\Component\Validator\Validation;
$validator = Validation::createValidatorBuilder()
->enableAnnotationMapping()
->addMethodMapping('loadValidatorMetadata')
->addXmlMapping('config/validation.xml')
->getValidator();
Кешування
Використання декількох завантажувачів для завантаження метаданих з різних місць - це зручно, але може уповільнити ваш додаток, так як кожному файлу потрібно бути парсованим, валідованим та перетвореним на екземпляр ClassMetadata.
Щоб вирішити цю проблему, викличте метод конструктора Валідатор setMetadataCache() і передайте ваш власний клас кешування (який повинен реалізовувати CacheInterface):
1 2 3 4 5 6
use Symfony\Component\Validator\Validation;
$validator = Validation::createValidatorBuilder()
// ... додайте завантажувачі
->setMetadataCache(new SomeImplementCacheInterface());
->getValidator();
Note
Завантажувачі вже використовують одиничний механізм завантаження. Це означає, що завантажувач завантажуватиме та парсуватиме файл лише один раз, і розміщувати це у властивості, які буде потім використана при запиті метаданих. Однак, Валідатор все одно повинен обʼєднати усі метадані класу з кожного завантажувача при такому запиті.
Використання користувацької MetadataFactory
Всі завантажувачі та кеш передаються екземпляру
LazyLoadingMetadataFactory.
Цей клас відповідає за створення екземпляру ClassMetadata
з усіх сконфігурованих
джерел.
Ви також можете використати реалізацію користувацької фабрики метаданих, шляхом створення класу, що реалізує MetadataFactoryInterface. Ви можете встановити таку користувацьку реалізацію, використовуючи setMetadataFactory():
1 2 3 4 5 6
use Acme\Validation\CustomMetadataFactory;
use Symfony\Component\Validator\Validation;
$validator = Validation::createValidatorBuilder()
->setMetadataFactory(new CustomMetadataFactory(...))
->getValidator();
Caution
Так як ви використовуєте користувацьку фабрику метаданих, ви більше не можете
конфігурувати, використовуючи методи add*Mapping()
. Тепер вам потрібно
самостійно впроваджувати їх у користувацьку фабрику метаданих.