From 85a9b7613c10e49b873c897bb39661a7aa90e0c5 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 21 Oct 2025 10:39:47 +0200 Subject: [PATCH] [Config] Deprecate config builder generators --- UPGRADE-7.4.md | 2 +- src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md | 1 + .../CacheWarmer/ConfigBuilderCacheWarmer.php | 2 +- .../DependencyInjection/FrameworkExtension.php | 4 ++++ .../Tests/CacheWarmer/ConfigBuilderCacheWarmerTest.php | 6 +++++- .../Component/Config/Builder/ConfigBuilderGenerator.php | 2 ++ .../Config/Builder/ConfigBuilderGeneratorInterface.php | 2 ++ .../Component/Config/Builder/ConfigBuilderInterface.php | 2 ++ src/Symfony/Component/Config/CHANGELOG.md | 2 +- .../Config/Tests/Builder/GeneratedConfigTest.php | 9 ++------- 10 files changed, 21 insertions(+), 11 deletions(-) diff --git a/UPGRADE-7.4.md b/UPGRADE-7.4.md index 8ce8dfcc5e76a..82bfca8fff4c0 100644 --- a/UPGRADE-7.4.md +++ b/UPGRADE-7.4.md @@ -23,7 +23,7 @@ Config * Deprecate accessing the internal scope of the loader in PHP config files, use only its public API instead * Deprecate setting a default value to a node that is required, and vice versa - * Deprecate generating fluent methods in config builders + * Deprecate fluent config builders, return PHP arrays from your config instead Console ------- diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index 5367397f3798d..1cd6b1bc18004 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -18,6 +18,7 @@ CHANGELOG * Add support for union types with `Symfony\Component\EventDispatcher\Attribute\AsEventListener` * Add `framework.allowed_http_method_override` option * Initialize `router.request_context`'s `_locale` parameter to `%kernel.default_locale%` + * Deprecate `ConfigBuilderCacheWarmer`, return PHP arrays from your config instead 7.3 --- diff --git a/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ConfigBuilderCacheWarmer.php b/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ConfigBuilderCacheWarmer.php index 48ed51aecb14e..6f29a7b74bc82 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ConfigBuilderCacheWarmer.php +++ b/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ConfigBuilderCacheWarmer.php @@ -30,7 +30,7 @@ * * @author Tobias Nyholm * - * @final since Symfony 7.1 + * @deprecated since Symfony 7.4 */ class ConfigBuilderCacheWarmer implements CacheWarmerInterface { diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index cd09ca5bebecb..a154953736403 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -47,6 +47,7 @@ use Symfony\Component\Cache\Marshaller\MarshallerInterface; use Symfony\Component\Cache\ResettableInterface; use Symfony\Component\Clock\ClockInterface; +use Symfony\Component\Config\Builder\ConfigBuilderGenerator; use Symfony\Component\Config\Definition\ConfigurationInterface; use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\Loader\LoaderInterface; @@ -297,6 +298,9 @@ public function load(array $configs, ContainerBuilder $container): void if (!class_exists(IsSignatureValidAttributeListener::class)) { $container->removeDefinition('controller.is_signature_valid_attribute_listener'); } + if (!class_exists(ConfigBuilderGenerator::class)) { + $container->removeDefinition('config_builder.warmer'); + } if ($this->hasConsole()) { $loader->load('console.php'); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ConfigBuilderCacheWarmerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ConfigBuilderCacheWarmerTest.php index 73edadc9a0fb4..4184cb56e979d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ConfigBuilderCacheWarmerTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ConfigBuilderCacheWarmerTest.php @@ -11,6 +11,8 @@ namespace Symfony\Bundle\FrameworkBundle\Tests\CacheWarmer; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\IgnoreDeprecations; use Symfony\Bundle\FrameworkBundle\CacheWarmer\ConfigBuilderCacheWarmer; use Symfony\Bundle\FrameworkBundle\FrameworkBundle; use Symfony\Bundle\FrameworkBundle\Tests\TestCase; @@ -31,7 +33,9 @@ use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\HttpKernel\KernelInterface; -class ConfigBuilderCacheWarmerTest extends TestCase +#[IgnoreDeprecations] +#[Group('legacy')] +final class ConfigBuilderCacheWarmerTest extends TestCase { private string $varDir; diff --git a/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php b/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php index 8d7b94ebc071c..1ef4956087a4f 100644 --- a/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php +++ b/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php @@ -30,6 +30,8 @@ * Generate ConfigBuilders to help create valid config. * * @author Tobias Nyholm + * + * @deprecated since Symfony 7.4 */ class ConfigBuilderGenerator implements ConfigBuilderGeneratorInterface { diff --git a/src/Symfony/Component/Config/Builder/ConfigBuilderGeneratorInterface.php b/src/Symfony/Component/Config/Builder/ConfigBuilderGeneratorInterface.php index c52c9e5d53874..7f395997997b1 100644 --- a/src/Symfony/Component/Config/Builder/ConfigBuilderGeneratorInterface.php +++ b/src/Symfony/Component/Config/Builder/ConfigBuilderGeneratorInterface.php @@ -17,6 +17,8 @@ * Generates ConfigBuilders to help create valid config. * * @author Tobias Nyholm + * + * @deprecated since Symfony 7.4 */ interface ConfigBuilderGeneratorInterface { diff --git a/src/Symfony/Component/Config/Builder/ConfigBuilderInterface.php b/src/Symfony/Component/Config/Builder/ConfigBuilderInterface.php index fd3129c584716..c9642d5654098 100644 --- a/src/Symfony/Component/Config/Builder/ConfigBuilderInterface.php +++ b/src/Symfony/Component/Config/Builder/ConfigBuilderInterface.php @@ -15,6 +15,8 @@ * A ConfigBuilder provides helper methods to build a large complex array. * * @author Tobias Nyholm + * + * @deprecated since Symfony 7.4 */ interface ConfigBuilderInterface { diff --git a/src/Symfony/Component/Config/CHANGELOG.md b/src/Symfony/Component/Config/CHANGELOG.md index 8cc432f6b78f4..5075ce21ccc05 100644 --- a/src/Symfony/Component/Config/CHANGELOG.md +++ b/src/Symfony/Component/Config/CHANGELOG.md @@ -11,7 +11,7 @@ CHANGELOG * Add array-shapes to generated config builders * Deprecate accessing the internal scope of the loader in PHP config files, use only its public API instead * Deprecate setting a default value to a node that is required, and vice versa - * Deprecate generating fluent methods in config builders + * Deprecate fluent config builders, return PHP arrays from your config instead 7.3 --- diff --git a/src/Symfony/Component/Config/Tests/Builder/GeneratedConfigTest.php b/src/Symfony/Component/Config/Tests/Builder/GeneratedConfigTest.php index 4bec5d0ba8dcb..d410568598c54 100644 --- a/src/Symfony/Component/Config/Tests/Builder/GeneratedConfigTest.php +++ b/src/Symfony/Component/Config/Tests/Builder/GeneratedConfigTest.php @@ -11,7 +11,6 @@ namespace Symfony\Component\Config\Tests\Builder; -use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\Attributes\IgnoreDeprecations; @@ -19,8 +18,6 @@ use Symfony\Component\Config\Builder\ClassBuilder; use Symfony\Component\Config\Builder\ConfigBuilderGenerator; use Symfony\Component\Config\Builder\ConfigBuilderInterface; -use Symfony\Component\Config\Builder\Method; -use Symfony\Component\Config\Builder\Property; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; use Symfony\Component\Config\Tests\Builder\Fixtures\AddToList; use Symfony\Component\Config\Tests\Builder\Fixtures\NodeInitialValues; @@ -35,10 +32,8 @@ * * @author Tobias Nyholm */ -#[CoversClass(ClassBuilder::class)] -#[CoversClass(ConfigBuilderGenerator::class)] -#[CoversClass(Method::class)] -#[CoversClass(Property::class)] +#[IgnoreDeprecations] +#[Group('legacy')] class GeneratedConfigTest extends TestCase { private array $tempDir = [];