Метод setDeprecated
Метод setDeprecated класса OptionsResolver помечает опцию как устаревшую. Первым параметром передаётся имя опции, вторым - сообщение с предупреждением, которое будет показано при использовании этой опции. Третьим необязательным параметром можно передать версию, в которой опция будет удалена.
Когда пользователь передаёт устаревшую опцию в resolve, Symfony генерирует предупреждение об устаревании с указанным сообщением. Это позволяет заранее предупредить разработчиков о том, что опция больше не поддерживается и будет удалена в будущих версиях.
Синтаксис
<?php
public function setDeprecated(
string $option,
string $message = '',
string $version = ''
): static
?>
Пример
Давайте создадим OptionsResolver и пометим опцию old_option как устаревшую:
<?php
namespace App\Service;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ArticleService
{
public function configureOptions(): array
{
$resolver = new OptionsResolver();
$resolver->setDefaults([
'old_option' => 'abcde',
'new_option' => 'hello',
]);
$resolver->setDeprecated(
'old_option',
'Опция "old_option" устарела, используйте "new_option".'
);
return $resolver->resolve(['old_option' => 'article']);
}
}
?>
Результат выполнения кода:
["old_option" => "article", "new_option" => "hello"]
При этом в лог будет записано предупреждение об устаревании с указанным сообщением.
Пример
Давайте укажем версию, в которой опция будет удалена:
<?php
namespace App\Service;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ArticleService
{
public function configureOptions(): array
{
$resolver = new OptionsResolver();
$resolver->setDefaults([
'legacy_mode' => false,
'mode' => 'default',
]);
$resolver->setDeprecated(
'legacy_mode',
'Опция "legacy_mode" устарела, используйте "mode".',
'2.0'
);
return $resolver->resolve(['legacy_mode' => true]);
}
}
?>
Результат выполнения кода:
["legacy_mode" => true, "mode" => "default"]
В предупреждении будет указано, что опция будет удалена в версии 2.0.
Пример
Давайте пометим несколько опций как устаревшие одновременно:
<?php
namespace App\Service;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ArticleService
{
public function configureOptions(): array
{
$resolver = new OptionsResolver();
$resolver->setDefaults([
'old_title' => 'abcde',
'old_text' => 'article',
'title' => 'hello',
'text' => 'user',
]);
$resolver->setDeprecated(
'old_title',
'Опция "old_title" устарела, используйте "title".'
);
$resolver->setDeprecated(
'old_text',
'Опция "old_text" устарела, используйте "text".'
);
return $resolver->resolve([
'old_title' => 'new title',
'old_text' => 'new text',
]);
}
}
?>
Результат выполнения кода:
["old_title" => "new title", "old_text" => "new text", "title" => "hello", "text" => "user"]
Смотрите также
-
класс
OptionsResolver,
который управляет конфигурацией опций -
метод
setDefaults,
который задаёт значения по умолчанию для опций -
метод
setInfo,
который добавляет описание к опции -
функция
trigger_deprecation,
которая генерирует предупреждение об устаревании