Skip to content

Commit 61755fe

Browse files
committed
Add framework config for DBAL cache adapter
1 parent b99965d commit 61755fe

File tree

5 files changed

+34
-8
lines changed

5 files changed

+34
-8
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ CHANGELOG
2121
* Add support for `statusCode` default parameter when loading a template directly from route using the `Symfony\Bundle\FrameworkBundle\Controller\TemplateController` controller
2222
* Deprecate `translation:update` command, use `translation:extract` instead
2323
* Add `PhpStanExtractor` support for the PropertyInfo component
24+
* Add `cache.adapter.doctrine_dbal` service to replace `cache.adapter.pdo` when a Doctrine DBAL connection is used.
2425

2526
5.3
2627
---

DependencyInjection/Configuration.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,6 +1077,7 @@ private function addCacheSection(ArrayNodeDefinition $rootNode, callable $willBe
10771077
->scalarNode('default_psr6_provider')->end()
10781078
->scalarNode('default_redis_provider')->defaultValue('redis://localhost')->end()
10791079
->scalarNode('default_memcached_provider')->defaultValue('memcached://localhost')->end()
1080+
->scalarNode('default_doctrine_dbal_provider')->defaultValue('database_connection')->end()
10801081
->scalarNode('default_pdo_provider')->defaultValue($willBeAvailable('doctrine/dbal', Connection::class) ? 'database_connection' : null)->end()
10811082
->arrayNode('pools')
10821083
->useAttributeAsKey('name')

DependencyInjection/FrameworkExtension.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
use Symfony\Component\Cache\Adapter\AdapterInterface;
3535
use Symfony\Component\Cache\Adapter\ArrayAdapter;
3636
use Symfony\Component\Cache\Adapter\ChainAdapter;
37+
use Symfony\Component\Cache\Adapter\DoctrineAdapter;
38+
use Symfony\Component\Cache\Adapter\DoctrineDbalAdapter;
3739
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
3840
use Symfony\Component\Cache\DependencyInjection\CachePoolPass;
3941
use Symfony\Component\Cache\Marshaller\DefaultMarshaller;
@@ -2159,6 +2161,14 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
21592161
$container->removeDefinition('cache.default_marshaller');
21602162
}
21612163

2164+
if (!class_exists(DoctrineAdapter::class)) {
2165+
$container->removeDefinition('cache.adapter.doctrine');
2166+
}
2167+
2168+
if (!class_exists(DoctrineDbalAdapter::class)) {
2169+
$container->removeDefinition('cache.adapter.doctrine_dbal');
2170+
}
2171+
21622172
$version = new Parameter('container.build_id');
21632173
$container->getDefinition('cache.adapter.apcu')->replaceArgument(2, $version);
21642174
$container->getDefinition('cache.adapter.system')->replaceArgument(2, $version);
@@ -2171,7 +2181,7 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
21712181
// Inline any env vars referenced in the parameter
21722182
$container->setParameter('cache.prefix.seed', $container->resolveEnvPlaceholders($container->getParameter('cache.prefix.seed'), true));
21732183
}
2174-
foreach (['doctrine', 'psr6', 'redis', 'memcached', 'pdo'] as $name) {
2184+
foreach (['doctrine', 'psr6', 'redis', 'memcached', 'doctrine_dbal', 'pdo'] as $name) {
21752185
if (isset($config[$name = 'default_'.$name.'_provider'])) {
21762186
$container->setAlias('cache.'.$name, new Alias(CachePoolPass::getServiceProvider($container, $config[$name]), false));
21772187
}

Resources/config/cache.php

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Component\Cache\Adapter\ApcuAdapter;
1818
use Symfony\Component\Cache\Adapter\ArrayAdapter;
1919
use Symfony\Component\Cache\Adapter\DoctrineAdapter;
20+
use Symfony\Component\Cache\Adapter\DoctrineDbalAdapter;
2021
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
2122
use Symfony\Component\Cache\Adapter\MemcachedAdapter;
2223
use Symfony\Component\Cache\Adapter\PdoAdapter;
@@ -93,10 +94,8 @@
9394
->call('setLogger', [service('logger')->ignoreOnInvalid()])
9495
->tag('cache.pool', ['clearer' => 'cache.default_clearer', 'reset' => 'reset'])
9596
->tag('monolog.logger', ['channel' => 'cache'])
96-
;
9797

98-
if (class_exists(DoctrineAdapter::class)) {
99-
$container->services()->set('cache.adapter.doctrine', DoctrineAdapter::class)
98+
->set('cache.adapter.doctrine', DoctrineAdapter::class)
10099
->abstract()
101100
->args([
102101
abstract_arg('Doctrine provider service'),
@@ -110,11 +109,8 @@
110109
'reset' => 'reset',
111110
])
112111
->tag('monolog.logger', ['channel' => 'cache'])
113-
->deprecate('symfony/framework-bundle', '5.4', 'The abstract service "%service_id%" is deprecated.')
114-
;
115-
}
112+
->deprecate('symfony/framework-bundle', '5.4', 'The "%service_id%" service inherits from "cache.adapter.doctrine" which is deprecated.')
116113

117-
$container->services()
118114
->set('cache.adapter.filesystem', FilesystemAdapter::class)
119115
->abstract()
120116
->args([
@@ -188,6 +184,23 @@
188184
])
189185
->tag('monolog.logger', ['channel' => 'cache'])
190186

187+
->set('cache.adapter.doctrine_dbal', DoctrineDbalAdapter::class)
188+
->abstract()
189+
->args([
190+
abstract_arg('DBAL connection service'),
191+
'', // namespace
192+
0, // default lifetime
193+
[], // table options
194+
service('cache.default_marshaller')->ignoreOnInvalid(),
195+
])
196+
->call('setLogger', [service('logger')->ignoreOnInvalid()])
197+
->tag('cache.pool', [
198+
'provider' => 'cache.default_doctrine_dbal_provider',
199+
'clearer' => 'cache.default_clearer',
200+
'reset' => 'reset',
201+
])
202+
->tag('monolog.logger', ['channel' => 'cache'])
203+
191204
->set('cache.adapter.pdo', PdoAdapter::class)
192205
->abstract()
193206
->args([

Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,7 @@ protected static function getBundleDefaultConfig()
504504
'directory' => '%kernel.cache_dir%/pools/app',
505505
'default_redis_provider' => 'redis://localhost',
506506
'default_memcached_provider' => 'memcached://localhost',
507+
'default_doctrine_dbal_provider' => 'database_connection',
507508
'default_pdo_provider' => ContainerBuilder::willBeAvailable('doctrine/dbal', Connection::class, ['symfony/framework-bundle']) ? 'database_connection' : null,
508509
'prefix_seed' => '_%kernel.project_dir%.%kernel.container_class%',
509510
],

0 commit comments

Comments
 (0)