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

Метод resolve класса OptionsResolver

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

Синтаксис

public function resolve(array $options = []): array

Пример

Давайте создадим объект OptionsResolver, зададим значения по умолчанию и вызовем метод resolve без аргументов:

<?php namespace AppService; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleService { public function getData(): array { $resolver = new OptionsResolver(); $resolver->setDefaults([ 'page' => 1, 'limit' => 10, ]); $res = $resolver->resolve(); print_r($res); } }

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

["page" => 1, "limit" => 10]

Пример

Давайте передадим в метод resolve собственные значения, которые переопределят значения по умолчанию:

<?php namespace AppService; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleService { public function getData(): array { $resolver = new OptionsResolver(); $resolver->setDefaults([ 'page' => 1, 'limit' => 10, ]); $res = $resolver->resolve([ 'page' => 3, ]); print_r($res); } }

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

["page" => 3, "limit" => 10]

Пример

Давайте передадим в resolve неизвестный ключ, которого нет в описании резолвера, и посмотрим на исключение:

<?php namespace AppService; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleService { public function getData(): array { $resolver = new OptionsResolver(); $resolver->setDefaults([ 'page' => 1, 'limit' => 10, ]); $res = $resolver->resolve([ 'order' => 'abcde', ]); print_r($res); } }

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

UndefinedOptionsException: The option "order" does not exist. Defined options are: "limit", "page".

Пример

Давайте используем setRequired и убедимся, что метод resolve выбросит исключение, если обязательная опция не передана:

<?php namespace AppService; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleService { public function getData(): array { $resolver = new OptionsResolver(); $resolver->setRequired(['title']); $res = $resolver->resolve(); print_r($res); } }

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

MissingOptionsException: The required option "title" is missing.

Пример

Давайте передадим обязательную опцию и получим корректный результат:

<?php namespace AppService; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleService { public function getData(): array { $resolver = new OptionsResolver(); $resolver->setRequired(['title']); $resolver->setDefaults([ 'page' => 1, ]); $res = $resolver->resolve([ 'title' => 'article', ]); print_r($res); } }

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

["title" => "article", "page" => 1]

Пример

Давайте применим нормализатор через setNormalizer, и метод resolve вернёт уже преобразованное значение:

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

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

["title" => "HELLO"]

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

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