Метод setDefined
Метод setDefined класса OptionsResolver
регистрирует опцию как известную и разрешённую,
но не задаёт для неё значение по умолчанию.
Это значит, что опция может быть передана в
resolve, но если она не передана,
то в итоговом массиве её не будет.
Первым параметром передаётся имя опции,
вторым - имя опции в виде строки или массив имён.
Метод полезен, когда нужно ограничить список допустимых опций, но при этом не навязывать значение по умолчанию. Попытка передать неизвестную опцию вызовет исключение.
Синтаксис
public function setDefined(string|array $option): static
Пример
Давайте определим опцию name как допустимую:
<?php
use SymfonyComponentOptionsResolverOptionsResolver;
$resolver = new OptionsResolver();
$resolver->setDefined('name');
$res = $resolver->resolve(['name' => 'abcde']);
echo $res['name'];
?>
Результат выполнения кода:
"abcde"
Пример
Если опция не передана, она просто отсутствует в результате, и ошибка не возникает:
<?php
use SymfonyComponentOptionsResolverOptionsResolver;
$resolver = new OptionsResolver();
$resolver->setDefined('name');
$res = $resolver->resolve([]);
var_dump($res);
?>
Результат выполнения кода:
[]
Пример
Можно определить сразу несколько опций, передав массив имён:
<?php
use SymfonyComponentOptionsResolverOptionsResolver;
$resolver = new OptionsResolver();
$resolver->setDefined(['name', 'age']);
$res = $resolver->resolve([
'name' => 'abcde',
'age' => 25,
]);
echo $res['name'] . ' ' . $res['age'];
?>
Результат выполнения кода:
"abcde 25"
Пример
Если передать опцию, которая не была
объявлена через setDefined
или другие методы, будет выброшено исключение:
<?php
use SymfonyComponentOptionsResolverOptionsResolver;
$resolver = new OptionsResolver();
$resolver->setDefined('name');
$res = $resolver->resolve(['age' => 25]);
?>
Результат выполнения кода:
SymfonyComponentOptionsResolverExceptionUndefinedOptionsException
Смотрите также
-
класс
OptionsResolver,
который управляет списком опций -
метод
setDefaults,
который задаёт значения по умолчанию -
метод
isDefined,
который проверяет, определена ли опция -
метод
resolve,
который возвращает итоговый массив опций