Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 51bfb86

Browse files
[FrameworkBundle] Simplify config for app/system/pool caches
1 parent 8af1022 commit 51bfb86

File tree

17 files changed

+189
-184
lines changed

17 files changed

+189
-184
lines changed

UPGRADE-3.1.md

Lines 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

Lines 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

Lines changed: 30 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,30 @@ private function getNamespace($namespaceSuffix, $id)
8486
{
8587
return substr(str_replace('/', '-', base64_encode(md5($id.$namespaceSuffix, true))), 0, 10);
8688
}
89+
90+
/**
91+
* @internal
92+
*/
93+
public static function getServiceProvider(ContainerBuilder $container, $name)
94+
{
95+
if (0 === strpos($name, 'redis://')) {
96+
$dsn = $name;
97+
98+
if (!$container->hasDefinition($name = md5($dsn))) {
99+
$definition = new Definition(\Redis::class);
100+
$definition->setPublic(false);
101+
$definition->setFactory(array(RedisAdapter::class, 'createConnection'));
102+
$definition->setArguments(array($dsn));
103+
if (($dsn = parse_url($dsn)) && isset($dsn['query'])) {
104+
parse_str($dsn['query'], $dsn);
105+
if (!empty($dsn['lazy'])) {
106+
$definition->setLazy(true);
107+
}
108+
}
109+
$container->setDefinition($name, $definition);
110+
}
111+
}
112+
113+
return $name;
114+
}
87115
}

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

Lines 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('directory')->defaultValue('%kernel.cache_dir%/pools')->end()
570+
->scalarNode('default_doctrine_provider')->end()
571+
->scalarNode('default_psr6_provider')->end()
572+
->scalarNode('default_redis_provider')->defaultValue('redis://localhost')->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

Lines 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['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

Lines 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

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -205,24 +205,23 @@
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="directory" type="xsd:string" minOccurs="0" maxOccurs="1" />
212+
<xsd:element name="default-doctrine-provider" type="xsd:string" minOccurs="0" maxOccurs="1" />
213+
<xsd:element name="default-psr6-provider" type="xsd:string" minOccurs="0" maxOccurs="1" />
214+
<xsd:element name="default-redis-provider" type="xsd:string" minOccurs="0" maxOccurs="1" />
215+
<xsd:element name="pool" type="cache_pool" minOccurs="0" maxOccurs="unbounded" />
216+
</xsd:sequence>
220217
</xsd:complexType>
221218

222219
<xsd:complexType name="cache_pool">
223220
<xsd:attribute name="name" type="xsd:string" use="required" />
224221
<xsd:attribute name="adapter" type="xsd:string" />
225222
<xsd:attribute name="public" type="xsd:boolean" />
226223
<xsd:attribute name="default-lifetime" type="xsd:integer" />
224+
<xsd:attribute name="provider" type="xsd:string" />
225+
<xsd:attribute name="clearer" type="xsd:string" />
227226
</xsd:complexType>
228227
</xsd:schema>

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

Lines 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

Lines 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+
'directory' => '%kernel.cache_dir%/pools',
274+
'default_redis_provider' => 'redis://localhost',
272275
),
273276
);
274277
}

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

Lines 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
),

0 commit comments

Comments
 (0)