Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f84e588

Browse filesBrowse files
[FrameworkBundle] Simplify config for app/system/pool caches
1 parent 5d6b824 commit f84e588
Copy full SHA for f84e588

File tree

17 files changed

+183
-184
lines changed
Filter options

17 files changed

+183
-184
lines changed

‎UPGRADE-3.1.md

Copy file name to clipboardExpand all lines: UPGRADE-3.1.md
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ FrameworkBundle
9090
cache service. If you are using `serializer.mapping.cache.apc`, use
9191
`serializer.mapping.cache.doctrine.apc` instead.
9292

93-
* The `framework.serializer.cache` option has been deprecated. Configure a cache pool
94-
called `serializer` under `framework.cache.pools` instead.
93+
* The `framework.serializer.cache` option has been deprecated. Configure the
94+
`cache.serializer` service under `framework.cache.pools` instead.
9595

9696
Before:
9797

@@ -107,7 +107,7 @@ FrameworkBundle
107107
framework:
108108
cache:
109109
pools:
110-
serializer:
110+
cache.serializer:
111111
adapter: cache.adapter.apcu
112112

113113
HttpKernel

‎UPGRADE-4.0.md

Copy file name to clipboardExpand all lines: UPGRADE-4.0.md
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ FrameworkBundle
7878
* The service `serializer.mapping.cache.apc` has been removed; use
7979
`serializer.mapping.cache.doctrine.apc` instead.
8080

81-
* The `framework.serializer.cache` option has been removed. Configure a cache pool
82-
called `serializer` under `framework.cache.pools` instead.
81+
* The `framework.serializer.cache` option has been removed. Configure the
82+
`cache.serializer` service under `framework.cache.pools` instead.
8383

8484
Before:
8585

@@ -95,7 +95,7 @@ FrameworkBundle
9595
framework:
9696
cache:
9797
pools:
98-
serializer:
98+
cache.serializer:
9999
adapter: cache.adapter.apcu
100100
```
101101

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CachePoolPass.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CachePoolPass.php
+27-2Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
1313

14+
use Symfony\Component\Cache\Adapter\RedisAdapter;
1415
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1516
use Symfony\Component\DependencyInjection\ContainerBuilder;
17+
use Symfony\Component\DependencyInjection\Definition;
1618
use Symfony\Component\DependencyInjection\DefinitionDecorator;
1719
use Symfony\Component\DependencyInjection\Reference;
1820

@@ -60,8 +62,8 @@ public function process(ContainerBuilder $container)
6062
}
6163
unset($tags[0]['clearer']);
6264

63-
if (isset($tags[0]['provider']) && is_string($tags[0]['provider'])) {
64-
$tags[0]['provider'] = new Reference($tags[0]['provider']);
65+
if (isset($tags[0]['provider'])) {
66+
$tags[0]['provider'] = new Reference(static::getServiceProvider($container, $tags[0]['provider']));
6567
}
6668
$i = 0;
6769
foreach ($attributes as $attr) {
@@ -84,4 +86,27 @@ private function getNamespace($namespaceSuffix, $id)
8486
{
8587
return substr(str_replace('/', '-', base64_encode(md5($id.$namespaceSuffix, true))), 0, 10);
8688
}
89+
90+
public static function getServiceProvider(ContainerBuilder $container, $name)
91+
{
92+
if (0 === strpos($name, 'redis://')) {
93+
$dsn = $name;
94+
95+
if (!$container->hasDefinition($name = md5($dsn))) {
96+
$definition = new Definition(\Redis::class);
97+
$definition->setPublic(false);
98+
$definition->setFactory(array(RedisAdapter::class, 'createConnection'));
99+
$definition->setArguments(array($dsn));
100+
if (($dsn = parse_url($dsn)) && isset($dsn['query'])) {
101+
parse_str($dsn['query'], $dsn);
102+
if (!empty($dsn['lazy'])) {
103+
$definition->setLazy(true);
104+
}
105+
}
106+
$container->setDefinition($name, $definition);
107+
}
108+
}
109+
110+
return $name;
111+
}
87112
}

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
+19-19Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -557,35 +557,35 @@ private function addCacheSection(ArrayNodeDefinition $rootNode)
557557
->info('Cache configuration')
558558
->addDefaultsIfNotSet()
559559
->fixXmlConfig('pool')
560-
->fixXmlConfig('adapter')
561560
->children()
562-
->arrayNode('adapters')
561+
->scalarNode('app')
562+
->info('App related cache pools configuration')
563+
->defaultValue('cache.adapter.filesystem')
564+
->end()
565+
->scalarNode('system')
566+
->info('System related cache pools configuration')
567+
->defaultValue('cache.adapter.filesystem')
568+
->end()
569+
->scalarNode('default_doctrine_provider')->end()
570+
->scalarNode('default_psr6_provider')->end()
571+
->scalarNode('default_redis_provider')->defaultValue('redis://localhost')->end()
572+
->scalarNode('default_directory')->defaultValue('%kernel.cache_dir%/pools')->end()
573+
->arrayNode('pools')
563574
->useAttributeAsKey('name')
564575
->prototype('array')
565576
->children()
566-
->scalarNode('parent')
567-
->isRequired()
568-
->info('The parent cache adapter service.')
569-
->end()
577+
->scalarNode('adapter')->defaultValue('cache.app')->end()
578+
->booleanNode('public')->defaultFalse()->end()
570579
->integerNode('default_lifetime')->end()
571580
->scalarNode('provider')
572-
->info('The service name to use as provider when the specified parent adapter needs one.')
581+
->info('The service name to use as provider when the specified adapter needs one.')
573582
->end()
574583
->scalarNode('clearer')->defaultValue('cache.default_pools_clearer')->end()
575584
->end()
576585
->end()
577-
->end()
578-
->arrayNode('pools')
579-
->useAttributeAsKey('name')
580-
->prototype('array')
581-
->children()
582-
->scalarNode('adapter')
583-
->info('The cache adapter service to use as template definition.')
584-
->defaultValue('cache.adapter.shared')
585-
->end()
586-
->booleanNode('public')->defaultTrue()->end()
587-
->integerNode('default_lifetime')->end()
588-
->end()
586+
->validate()
587+
->ifTrue(function ($v) { return isset($v['cache.app']) || isset($v['cache.system']); })
588+
->thenInvalid('"cache.app" and "cache.system" are reserved names')
589589
->end()
590590
->end()
591591
->end()

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+20-16Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public function load(array $configs, ContainerBuilder $container)
7373
$loader->load('property_access.xml');
7474

7575
// Load Cache configuration first as it is used by other components
76-
$loader->load('cache_pools.xml');
76+
$loader->load('cache.xml');
7777

7878
$configuration = $this->getConfiguration($configs, $container);
7979
$config = $this->processConfiguration($configuration, $configs);
@@ -984,7 +984,7 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
984984
$chainLoader->replaceArgument(0, $serializerLoaders);
985985

986986
if (isset($config['cache']) && $config['cache']) {
987-
@trigger_error('The "framework.serializer.cache" option is deprecated since Symfony 3.1 and will be removed in 4.0. You can configure a cache pool called "serializer" under "framework.cache.pools" instead.', E_USER_DEPRECATED);
987+
@trigger_error('The "framework.serializer.cache" option is deprecated since Symfony 3.1 and will be removed in 4.0. Configure the "cache.serializer" service under "framework.cache.pools" instead.', E_USER_DEPRECATED);
988988

989989
$container->setParameter(
990990
'serializer.mapping.cache.prefix',
@@ -999,7 +999,7 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
999999
CacheClassMetadataFactory::class,
10001000
array(
10011001
new Reference('serializer.mapping.cache_class_metadata_factory.inner'),
1002-
new Reference('cache.pool.serializer'),
1002+
new Reference('cache.serializer'),
10031003
)
10041004
);
10051005
$cacheMetadataFactory->setPublic(false);
@@ -1037,22 +1037,26 @@ private function registerPropertyInfoConfiguration(array $config, ContainerBuild
10371037

10381038
private function registerCacheConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
10391039
{
1040-
foreach ($config['adapters'] as $name => $adapterConfig) {
1041-
$adapterDefinition = new DefinitionDecorator($adapterConfig['parent']);
1042-
$adapterDefinition->setAbstract(true);
1043-
unset($adapterConfig['parent']);
1040+
$container->getDefinition('cache.adapter.filesystem')->replaceArgument(2, $config['default_directory']);
10441041

1045-
$adapterDefinition->addTag('cache.pool', $adapterConfig);
1046-
$container->setDefinition('cache.adapter.'.$name, $adapterDefinition);
1042+
foreach (array('doctrine', 'psr6', 'redis') as $name) {
1043+
if (isset($config[$name = 'default_'.$name.'_provider'])) {
1044+
$container->setAlias('cache.'.$name, Compiler\CachePoolPass::getServiceProvider($container, $config[$name]));
1045+
}
10471046
}
1047+
foreach (array('app', 'system') as $name) {
1048+
$config['pools']['cache.'.$name] = array(
1049+
'adapter' => $config[$name],
1050+
'public' => true,
1051+
);
1052+
}
1053+
foreach ($config['pools'] as $name => $pool) {
1054+
$definition = new DefinitionDecorator($pool['adapter']);
1055+
$definition->setPublic($pool['public']);
1056+
unset($pool['adapter'], $pool['public']);
10481057

1049-
foreach ($config['pools'] as $name => $poolConfig) {
1050-
$poolDefinition = new DefinitionDecorator($poolConfig['adapter']);
1051-
$poolDefinition->setPublic($poolConfig['public']);
1052-
unset($poolConfig['adapter'], $poolConfig['public']);
1053-
1054-
$poolDefinition->addTag('cache.pool', $poolConfig);
1055-
$container->setDefinition('cache.pool.'.$name, $poolDefinition);
1058+
$definition->addTag('cache.pool', $pool);
1059+
$container->setDefinition($name, $definition);
10561060
}
10571061

10581062
$this->addClassesToCompile(array(

‎src/Symfony/Bundle/FrameworkBundle/Resources/config/cache_pools.xml renamed to ‎src/Symfony/Bundle/FrameworkBundle/Resources/config/cache.xml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Resources/config/cache.xml
+13-12Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,22 @@
66

77
<services>
88

9-
<service id="cache.default_pools_clearer" class="Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer" public="false">
10-
<tag name="kernel.cache_clearer" />
9+
<service id="cache.app" parent="cache.adapter.filesystem">
10+
<tag name="cache.pool" />
1111
</service>
1212

13-
<service id="cache.pool.app" parent="cache.adapter.shared">
13+
<service id="cache.system" parent="cache.adapter.filesystem">
1414
<tag name="cache.pool" />
1515
</service>
1616

17-
<service id="cache.pool.validator" parent="cache.adapter.local" public="false">
17+
<service id="cache.validator" parent="cache.system" public="false">
1818
<tag name="cache.pool" />
1919
</service>
2020

21-
<service id="cache.pool.serializer" parent="cache.adapter.local" public="false">
21+
<service id="cache.serializer" parent="cache.system" public="false">
2222
<tag name="cache.pool" />
2323
</service>
2424

25-
<service id="cache.adapter.local" alias="cache.adapter.filesystem" />
26-
<service id="cache.adapter.shared" alias="cache.adapter.filesystem" />
27-
2825
<service id="cache.adapter.apcu" class="Symfony\Component\Cache\Adapter\ApcuAdapter" abstract="true">
2926
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
3027
<tag name="monolog.logger" channel="cache" />
@@ -36,7 +33,7 @@
3633
</service>
3734

3835
<service id="cache.adapter.doctrine" class="Symfony\Component\Cache\Adapter\DoctrineAdapter" abstract="true">
39-
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
36+
<tag name="cache.pool" provider="cache.default_doctrine_provider" clearer="cache.default_pools_clearer" />
4037
<tag name="monolog.logger" channel="cache" />
4138
<argument /> <!-- Doctrine provider service -->
4239
<argument /> <!-- namespace -->
@@ -58,22 +55,26 @@
5855
</service>
5956

6057
<service id="cache.adapter.psr6" class="Symfony\Component\Cache\Adapter\ProxyAdapter" abstract="true">
61-
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
58+
<tag name="cache.pool" provider="cache.default_psr6_provider" clearer="cache.default_pools_clearer" />
6259
<argument /> <!-- PSR-6 provider service -->
6360
<argument /> <!-- namespace -->
6461
<argument /> <!-- default lifetime -->
6562
</service>
6663

6764
<service id="cache.adapter.redis" class="Symfony\Component\Cache\Adapter\RedisAdapter" abstract="true">
68-
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
65+
<tag name="cache.pool" provider="cache.default_redis_provider" clearer="cache.default_pools_clearer" />
6966
<tag name="monolog.logger" channel="cache" />
70-
<argument /> <!-- Redis connection object -->
67+
<argument /> <!-- Redis connection service -->
7168
<argument /> <!-- namespace -->
7269
<argument /> <!-- default lifetime -->
7370
<call method="setLogger">
7471
<argument type="service" id="logger" on-invalid="ignore" />
7572
</call>
7673
</service>
7774

75+
<service id="cache.default_pools_clearer" class="Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer" public="false">
76+
<tag name="kernel.cache_clearer" />
77+
</service>
78+
7879
</services>
7980
</container>

‎src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
+8-12Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -205,24 +205,20 @@
205205
</xsd:complexType>
206206

207207
<xsd:complexType name="cache">
208-
<xsd:choice minOccurs="1" maxOccurs="unbounded">
209-
<xsd:element name="adapter" type="cache_adapter" />
210-
<xsd:element name="pool" type="cache_pool" />
211-
</xsd:choice>
212-
</xsd:complexType>
213-
214-
<xsd:complexType name="cache_adapter">
215-
<xsd:attribute name="name" type="xsd:string" use="required" />
216-
<xsd:attribute name="parent" type="xsd:string" />
217-
<xsd:attribute name="default-lifetime" type="xsd:integer" />
218-
<xsd:attribute name="provider" type="xsd:string" />
219-
<xsd:attribute name="clearer" type="xsd:string" />
208+
<xsd:sequence>
209+
<xsd:element name="app" type="xsd:string" minOccurs="0" maxOccurs="1" />
210+
<xsd:element name="system" type="xsd:string" minOccurs="0" maxOccurs="1" />
211+
<xsd:element name="redis_dsn" type="xsd:string" minOccurs="0" maxOccurs="1" />
212+
<xsd:element name="pool" type="cache_pool" minOccurs="0" maxOccurs="unbounded" />
213+
</xsd:sequence>
220214
</xsd:complexType>
221215

222216
<xsd:complexType name="cache_pool">
223217
<xsd:attribute name="name" type="xsd:string" use="required" />
224218
<xsd:attribute name="adapter" type="xsd:string" />
225219
<xsd:attribute name="public" type="xsd:boolean" />
226220
<xsd:attribute name="default-lifetime" type="xsd:integer" />
221+
<xsd:attribute name="provider" type="xsd:string" />
222+
<xsd:attribute name="clearer" type="xsd:string" />
227223
</xsd:complexType>
228224
</xsd:schema>

‎src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.xml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.xml
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<service id="validator.mapping.class_metadata_factory" alias="validator" public="false" />
3030

3131
<service id="validator.mapping.cache.symfony" class="Symfony\Component\Validator\Mapping\Cache\Psr6Cache" public="false">
32-
<argument type="service" id="cache.pool.validator" />
32+
<argument type="service" id="cache.validator" />
3333
</service>
3434

3535
<service id="validator.mapping.cache.doctrine.apc" class="Symfony\Component\Validator\Mapping\Cache\DoctrineCache" public="false">

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php
+4-1Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,11 @@ protected static function getBundleDefaultConfig()
267267
'packages' => array(),
268268
),
269269
'cache' => array(
270-
'adapters' => array(),
271270
'pools' => array(),
271+
'app' => 'cache.adapter.filesystem',
272+
'system' => 'cache.adapter.filesystem',
273+
'default_redis_provider' => 'redis://localhost',
274+
'default_directory' => '%kernel.cache_dir%/pools',
272275
),
273276
);
274277
}

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache.php
+7-16Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,26 @@
22

33
$container->loadFromExtension('framework', array(
44
'cache' => array(
5-
'adapters' => array(
6-
'foo' => array(
7-
'parent' => 'cache.adapter.filesystem',
8-
'default_lifetime' => 30,
9-
),
10-
'app_redis' => array(
11-
'parent' => 'cache.adapter.redis',
12-
'provider' => 'app.redis_connection',
13-
'default_lifetime' => 30,
14-
),
15-
),
165
'pools' => array(
17-
'foo' => array(
6+
'cache.foo' => array(
187
'adapter' => 'cache.adapter.apcu',
198
'default_lifetime' => 30,
209
),
21-
'bar' => array(
10+
'cache.bar' => array(
2211
'adapter' => 'cache.adapter.doctrine',
2312
'default_lifetime' => 5,
13+
'provider' => 'app.doctrine_cache_provider',
2414
),
25-
'baz' => array(
15+
'cache.baz' => array(
2616
'adapter' => 'cache.adapter.filesystem',
2717
'default_lifetime' => 7,
2818
),
29-
'foobar' => array(
19+
'cache.foobar' => array(
3020
'adapter' => 'cache.adapter.psr6',
3121
'default_lifetime' => 10,
22+
'provider' => 'app.cache_pool',
3223
),
33-
'def' => array(
24+
'cache.def' => array(
3425
'default_lifetime' => 11,
3526
),
3627
),

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache.xml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache.xml
+5-7Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@
77

88
<framework:config>
99
<framework:cache>
10-
<framework:adapter name="foo" parent="cache.adapter.filesystem" default-lifetime="30" />
11-
<framework:adapter name="app_redis" parent="cache.adapter.redis" provider="app.redis_connection" default-lifetime="30" />
12-
<framework:pool name="foo" adapter="cache.adapter.apcu" default-lifetime="30" />
13-
<framework:pool name="bar" adapter="cache.adapter.doctrine" default-lifetime="5" />
14-
<framework:pool name="baz" adapter="cache.adapter.filesystem" default-lifetime="7" />
15-
<framework:pool name="foobar" adapter="cache.adapter.psr6" default-lifetime="10" />
16-
<framework:pool name="def" default-lifetime="11" />
10+
<framework:pool name="cache.foo" adapter="cache.adapter.apcu" default-lifetime="30" />
11+
<framework:pool name="cache.bar" adapter="cache.adapter.doctrine" default-lifetime="5" provider="app.doctrine_cache_provider" />
12+
<framework:pool name="cache.baz" adapter="cache.adapter.filesystem" default-lifetime="7" />
13+
<framework:pool name="cache.foobar" adapter="cache.adapter.psr6" default-lifetime="10" provider="app.cache_pool" />
14+
<framework:pool name="cache.def" default-lifetime="11" />
1715
</framework:cache>
1816
</framework:config>
1917
</container>

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.