Метод 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,
который ограничивает типы значений опций