Метод setDefaults
Метод setDefaults класса OptionsResolver принимает ассоциативный массив, где ключи - это имена опций, а значения - их значения по умолчанию. Если при вызове resolve пользователь не передал какую-то опцию, будет использовано значение из этого массива. Метод можно вызывать несколько раз - новые опции добавятся к уже существующим.
Синтаксис
public function setDefaults(array $defaults): static
Пример
Давайте создадим резолвер и зададим две опции по умолчанию:
<?php
use SymfonyComponentOptionsResolverOptionsResolver;
$resolver = new OptionsResolver();
$resolver->setDefaults([
'name' => 'user',
'age' => 25,
]);
$res = $resolver->resolve();
print_r($res);
?>
Результат выполнения кода:
["name" => "user", "age" => 25]
Пример
Давайте переопределим опцию name при вызове resolve:
<?php
use SymfonyComponentOptionsResolverOptionsResolver;
$resolver = new OptionsResolver();
$resolver->setDefaults([
'name' => 'user',
'age' => 25,
]);
$res = $resolver->resolve(['name' => 'abcde']);
print_r($res);
?>
Результат выполнения кода:
["name" => "abcde", "age" => 25]
Пример
Давайте добавим опции по умолчанию в два вызова setDefaults:
<?php
use SymfonyComponentOptionsResolverOptionsResolver;
$resolver = new OptionsResolver();
$resolver->setDefaults([
'name' => 'user',
]);
$resolver->setDefaults([
'age' => 25,
]);
$res = $resolver->resolve();
print_r($res);
?>
Результат выполнения кода:
["name" => "user", "age" => 25]
Пример
Давайте используем метод в сервисе, который принимает массив настроек:
<?php
namespace AppService;
use SymfonyComponentOptionsResolverOptionsResolver;
class ArticleService
{
public function handle(array $options): array
{
$resolver = new OptionsResolver();
$resolver->setDefaults([
'title' => 'article',
'published' => false,
]);
return $resolver->resolve($options);
}
}
?>
Давайте вызовем сервис и передадим только опцию title:
<?php
use AppServiceArticleService;
$service = new ArticleService();
$res = $service->handle(['title' => 'abcde']);
print_r($res);
?>
Результат выполнения кода:
["title" => "abcde", "published" => false]
Смотрите также
-
класс
OptionsResolver,
который управляет набором опций -
метод
setDefault,
который задаёт одну опцию по умолчанию -
метод
setRequired,
который делает опцию обязательной -
метод
resolve,
который проверяет и возвращает итоговый массив опций