РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1030 of 1361 menu

Класс OptionsResolver

Класс OptionsResolver используется для управления массивами параметров (опций). Он позволяет задать значения по умолчанию, обязательные и необязательные параметры, разрешённые типы и значения, а также нормализовать данные перед использованием.

Синтаксис

$resolver = new OptionsResolver(); $resolver->setDefaults(array $defaults); $resolver->setRequired(array $required); $resolver->setDefined(array $defined); $resolver->setAllowedTypes(string $option, string|array $types); $resolver->setAllowedValues(string $option, array|Closure $values); $resolver->setNormalizer(string $option, Closure $normalizer); $options = $resolver->resolve(array $options);

Пример

Давайте создадим простой резолвер с параметром по умолчанию:

<?php namespace AppService; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleService { public function getArticle(array $options = []): string { $resolver = new OptionsResolver(); $resolver->setDefaults([ 'title' => 'hello', 'limit' => 10, ]); $options = $resolver->resolve($options); return $options['title'] . ' ' . $options['limit']; } } ?>

Результат выполнения кода с пустым массивом опций:

"hello 10"

Пример

Давайте сделаем параметр title обязательным:

<?php namespace AppService; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleService { public function getArticle(array $options = []): string { $resolver = new OptionsResolver(); $resolver->setRequired(['title']); $resolver->setDefaults([ 'limit' => 10, ]); $options = $resolver->resolve($options); return $options['title'] . ' ' . $options['limit']; } } ?>

Результат выполнения кода при передаче только title:

"abcde 10"

Если не передать обязательный параметр, будет выброшено исключение MissingOptionsException.

Пример

Давайте ограничим допустимые типы для параметра limit:

<?php namespace AppService; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleService { public function getArticle(array $options = []): int { $resolver = new OptionsResolver(); $resolver->setDefaults([ 'limit' => 10, ]); $resolver->setAllowedTypes('limit', 'integer'); $options = $resolver->resolve($options); return $options['limit']; } } ?>

Результат выполнения кода при передаче корректного значения:

5

Если передать строку вместо числа, будет выброшено исключение InvalidTypeException.

Пример

Давайте ограничим допустимые значения для параметра status:

<?php namespace AppService; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleService { public function getArticle(array $options = []): string { $resolver = new OptionsResolver(); $resolver->setDefaults([ 'status' => 'draft', ]); $resolver->setAllowedValues('status', ['draft', 'published', 'archived']); $options = $resolver->resolve($options); return $options['status']; } } ?>

Результат выполнения кода при передаче корректного значения:

"published"

Если передать недопустимое значение, будет выброшено исключение InvalidOptionsException.

Пример

Давайте добавим нормализатор для параметра title, который будет приводить строку к нижнему регистру:

<?php namespace AppService; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleService { public function getArticle(array $options = []): string { $resolver = new OptionsResolver(); $resolver->setDefaults([ 'title' => 'hello', ]); $resolver->setNormalizer('title', function ($options, $value) { return strtolower($value); }); $options = $resolver->resolve($options); return $options['title']; } } ?>

Результат выполнения кода при передаче 'ABCDE':

"abcde"

Смотрите также

  • метод setDefaults,
    который задаёт значения по умолчанию
  • метод setRequired,
    который делает параметры обязательными
  • метод setAllowedTypes,
    который ограничивает типы значений
  • метод resolve,
    который возвращает итоговый массив опций
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить