Метод setAllowedValues
Метод setAllowedValues класса OptionsResolver
ограничивает множество значений, которые может
принимать опция. Первым параметром передаётся
имя опции, вторым - массив допустимых значений
или замыкание для их проверки. Если переданное
значение не входит в список, выбрасывается
исключение InvalidOptionsException.
Синтаксис
setAllowedValues(string $option, array|Closure $allowedValues): static
Пример
Давайте разрешим опции format только три значения:
<?php
namespace AppService;
use SymfonyComponentOptionsResolverOptionsResolver;
class ArticleService
{
public function configure(): array
{
$resolver = new OptionsResolver();
$resolver->setDefaults(['format' => 'html']);
$resolver->setAllowedValues('format', ['html', 'json', 'xml']);
return $resolver->resolve(['format' => 'json']);
}
}
?>
Результат выполнения кода:
["format" => "json"]
Пример
Давайте передадим недопустимое значение и получим исключение:
<?php
namespace AppService;
use SymfonyComponentOptionsResolverOptionsResolver;
class ArticleService
{
public function configure(): array
{
$resolver = new OptionsResolver();
$resolver->setDefaults(['format' => 'html']);
$resolver->setAllowedValues('format', ['html', 'json', 'xml']);
return $resolver->resolve(['format' => 'csv']);
}
}
?>
Результат выполнения кода:
SymfonyComponentOptionsResolverExceptionInvalidOptionsException:
The option "format" with value "csv" is invalid.
Пример
Давайте используем замыкание для проверки значения:
<?php
namespace AppService;
use SymfonyComponentOptionsResolverOptionsResolver;
class ArticleService
{
public function configure(): array
{
$resolver = new OptionsResolver();
$resolver->setDefaults(['limit' => 10]);
$resolver->setAllowedValues('limit', function ($value) {
return $value >= 1 && $value <= 100;
});
return $resolver->resolve(['limit' => 50]);
}
}
?>
Результат выполнения кода:
["limit" => 50]
Пример
Давайте проверим несколько опций сразу:
<?php
namespace AppService;
use SymfonyComponentOptionsResolverOptionsResolver;
class ArticleService
{
public function configure(): array
{
$resolver = new OptionsResolver();
$resolver->setDefaults([
'status' => 'draft',
'priority' => 1,
]);
$resolver->setAllowedValues('status', ['draft', 'published', 'archived']);
$resolver->setAllowedValues('priority', [1, 2, 3, 4, 5]);
return $resolver->resolve([
'status' => 'published',
'priority' => 3,
]);
}
}
?>
Результат выполнения кода:
["status" => "published", "priority" => 3]
Смотрите также
-
класс
OptionsResolver,
который управляет опциями конфигурации -
метод
setAllowedTypes,
который задаёт допустимые типы опции -
метод
setDefaults,
который задаёт значения по умолчанию -
метод
resolve,
который проверяет и возвращает опции