Компонент OptionsResolver помогает настраивать объекты с массивами параметров. В Symfony 5.1 улучшили его с помощью следующих функций.
Fluent Interface
Обычно для каждого параметра настраивается несколько функций (его разрешенные типы, значения по умолчанию, требуется ли он или нет и т. д.). Благодаря новому методу define()
вы можете использовать свободный интерфейс для настройки всего, что касается параметра, без повторения его имя в разных методах:
// Before
$resolver->setRequired('host');
$resolver->setDefaults(['host' => 'smtp.example.org']);
$resolver->setAllowedTypes('host', 'string');
// After
$resolver->define('host')
->required()
->default('smtp.example.org')
->allowedTypes('string');
Опция Отладочная информация
Иногда название опции или ее высокодинамичная функция затрудняет понимание сообщений об ошибках, генерируемых Symfony. Вот почему в Symfony 5.1 представили новый метод, который улучшает DX (опыт разработчика), позволяя вам добавить описание/помощь/отладочное сообщение для опции.
Представьте, что вы определяете опцию datetime
, значение которой должно быть в будущем:
$resolver->setAllowedValues('scheduledAt', static function ($value): bool {
return $value >= new \DateTime('now');
});
Это стандартное сообщение об ошибке, отображаемое Symfony в этом случае:
The option "scheduledAt" with value DateTime is invalid.
Однако, если вы добавите методы info()
или setInfo()
:
// using the traditional syntax
$resolver->setInfo('scheduledAt', 'It must be a date in the future.');
// using the fluent interface
$resolver->define('scheduledAt')
// ...
->info('It must be a date in the future.');
Теперь отображается сообщение об ошибке:
The option "scheduledAt" with value DateTime is invalid.
Info: It must be a date in the future.