Метод setNormalizer
Метод setNormalizer класса OptionsResolver позволяет
назначить опции callback-функцию, которая будет вызываться
во время разрешения опций и приводить переданное значение
к нужному виду. Первым параметром передаётся имя опции,
вторым - замыкание с сигнатурой
function (Options $options, $value): mixed.
Замыкание получает экземпляр Options с остальными
разрешёнными опциями и текущее значение, а возвращает
уже нормализованное значение. Нормализатор применяется
после проверки типов и значений, но до вызова
resolve.
Синтаксис
$resolver->setNormalizer(string $option, callable $normalizer)
Пример
Давайте зададим опцию text и нормализатор,
который приводит строку к верхнему регистру:
<?php
use SymfonyComponentOptionsResolverOptionsResolver;
$resolver = new OptionsResolver();
$resolver->setDefault('text', 'hello');
$resolver->setNormalizer('text', function ($options, $value) {
return strtoupper($value);
});
$res = $resolver->resolve(['text' => 'abcde']);
echo $res['text'];
?>
Результат выполнения кода:
"ABCDE"
Пример
Давайте нормализуем опцию count, приводя
любое значение к целому числу:
<?php
use SymfonyComponentOptionsResolverOptionsResolver;
$resolver = new OptionsResolver();
$resolver->setDefault('count', 0);
$resolver->setAllowedTypes('count', ['int', 'string']);
$resolver->setNormalizer('count', function ($options, $value) {
return (int) $value;
});
$res = $resolver->resolve(['count' => '42']);
var_dump($res['count']);
?>
Результат выполнения кода:
42
Пример
Давайте используем нормализатор, который зависит
от другой опции prefix:
<?php
use SymfonyComponentOptionsResolverOptionsResolver;
$resolver = new OptionsResolver();
$resolver->setDefault('prefix', 'user_');
$resolver->setDefault('name', 'abcde');
$resolver->setNormalizer('name', function ($options, $value) {
return $options['prefix'] . $value;
});
$res = $resolver->resolve(['name' => 'hello']);
echo $res['name'];
?>
Результат выполнения кода:
"user_hello"
Смотрите также
-
класс
OptionsResolver,
который управляет списком опций -
метод
setDefaults,
который задаёт значения по умолчанию -
метод
setAllowedTypes,
который ограничивает типы значений опции -
метод
resolve,
который возвращает итоговый массив опций