From 4a8aaa4a9ca349936d05f87cc09f49ef8af793ec Mon Sep 17 00:00:00 2001 From: Dave Long <dave@longwaveconsulting.com> Date: Tue, 12 Nov 2024 09:18:41 +0000 Subject: [PATCH] Issue #3485296 by bradjones1, longwave, alexpott: Regression: Deprecation of `yaml_parser_class` setting in 10.3 breaks sites < 11.0 --- core/.deprecation-ignore.txt | 4 ++++ .../scaffold/files/default.settings.php | 2 ++ core/lib/Drupal/Core/Serialization/Yaml.php | 22 ++++++++++++++++--- sites/default/default.settings.php | 2 ++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/core/.deprecation-ignore.txt b/core/.deprecation-ignore.txt index 3c1c894cf17d..c2720827823c 100644 --- a/core/.deprecation-ignore.txt +++ b/core/.deprecation-ignore.txt @@ -49,6 +49,10 @@ %Drupal\\editor\\Form\\EditorImageDialog is deprecated in drupal:10.1.0 and is removed from drupal:11.0.0. There is no replacement. See https://www.drupal.org/node/3291493% %Drupal\\editor\\Form\\EditorLinkDialog is deprecated in drupal:10.1.0 and is removed from drupal:11.0.0. There is no replacement. See https://www.drupal.org/node/3291493% +# In Drupal 10, skip deprecations for the "yaml_parser_class" setting. +# This is retained with a BC layer, but removed in Drupal 11. +%The "yaml_parser_class" setting is deprecated in drupal:10.3.0. This setting should be removed from the settings file, since its usage has been removed. See https://www.drupal.org/node/3415489.% + # Symfony 7. %Method "Symfony\\Contracts\\Service\\ResetInterface::reset\(\)" might add "void" as a native return type declaration in the future. Do the same in implementation "Drupal\\Component\\DependencyInjection\\Container" now to avoid errors or add an explicit @return annotation to suppress this message.% diff --git a/core/assets/scaffold/files/default.settings.php b/core/assets/scaffold/files/default.settings.php index 264597b163ba..90883ff469b6 100644 --- a/core/assets/scaffold/files/default.settings.php +++ b/core/assets/scaffold/files/default.settings.php @@ -730,6 +730,8 @@ * Provide a fully qualified class name here if you would like to provide an * alternate implementation YAML parser. The class must implement the * \Drupal\Component\Serialization\SerializationInterface interface. + * + * This setting is deprecated in Drupal 10.3 and removed in Drupal 11. */ # $settings['yaml_parser_class'] = NULL; diff --git a/core/lib/Drupal/Core/Serialization/Yaml.php b/core/lib/Drupal/Core/Serialization/Yaml.php index 564fdac993d4..6e7b37cf7a8d 100644 --- a/core/lib/Drupal/Core/Serialization/Yaml.php +++ b/core/lib/Drupal/Core/Serialization/Yaml.php @@ -1,7 +1,23 @@ <?php -// phpcs:ignoreFile + +namespace Drupal\Core\Serialization; + +use Drupal\Core\Site\Settings; +use Drupal\Component\Serialization\Yaml as ComponentYaml; /** - * Provides a BC layer for Drupal\Core\Serialization\Yaml. + * Provides a YAML serialization implementation. + * + * Allow settings to override the YAML implementation resolution. */ -class_alias('\Drupal\Component\Serialization\Yaml', '\Drupal\Core\Serialization\Yaml'); +class Yaml extends ComponentYaml { + + public static function decode($raw) { + if ($class = Settings::get('yaml_parser_class')) { + return $class::decode($raw); + } + + return parent::decode($raw); + } + +} diff --git a/sites/default/default.settings.php b/sites/default/default.settings.php index 264597b163ba..90883ff469b6 100644 --- a/sites/default/default.settings.php +++ b/sites/default/default.settings.php @@ -730,6 +730,8 @@ * Provide a fully qualified class name here if you would like to provide an * alternate implementation YAML parser. The class must implement the * \Drupal\Component\Serialization\SerializationInterface interface. + * + * This setting is deprecated in Drupal 10.3 and removed in Drupal 11. */ # $settings['yaml_parser_class'] = NULL; -- GitLab