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 00986d1

Browse filesBrowse files
committed
[Cache][FrameworkBundle] Add cache adapters in semantic configuration
1 parent db208e3 commit 00986d1
Copy full SHA for 00986d1

File tree

10 files changed

+151
-36
lines changed
Filter options

10 files changed

+151
-36
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CachePoolPass.php
+3-1Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ public function process(ContainerBuilder $container)
4444
if ($pool->isAbstract()) {
4545
continue;
4646
}
47-
$tags[0]['namespace'] = $this->getNamespace($namespaceSuffix, isset($tags[0]['namespace']) ? $tags[0]['namespace'] : $id);
47+
if (!isset($tags[0]['namespace'])) {
48+
$tags[0]['namespace'] = $this->getNamespace($namespaceSuffix, $id);
49+
}
4850
while ($adapter instanceof DefinitionDecorator) {
4951
$adapter = $container->findDefinition($adapter->getParent());
5052
if ($t = $adapter->getTag('cache.pool')) {

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
+19-6Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -557,24 +557,37 @@ private function addCacheSection(ArrayNodeDefinition $rootNode)
557557
->info('Cache configuration')
558558
->addDefaultsIfNotSet()
559559
->fixXmlConfig('pool')
560+
->fixXmlConfig('adapter')
560561
->children()
562+
->arrayNode('adapters')
563+
->useAttributeAsKey('name')
564+
->prototype('array')
565+
->children()
566+
->scalarNode('parent')
567+
->isRequired()
568+
->info('The parent cache adapter service.')
569+
->end()
570+
->integerNode('default_lifetime')->end()
571+
->scalarNode('provider')
572+
->info('The service name to use as provider when the specified parent adapter needs one.')
573+
->end()
574+
->scalarNode('clearer')->defaultValue('cache.default_pools_clearer')->end()
575+
->end()
576+
->end()
577+
->end()
561578
->arrayNode('pools')
562579
->useAttributeAsKey('name')
563580
->prototype('array')
564581
->children()
565582
->scalarNode('adapter')
566-
->info('The cache pool adapter service to use as template definition.')
583+
->info('The cache adapter service to use as template definition.')
567584
->defaultValue('cache.adapter.shared')
568585
->end()
569586
->booleanNode('public')->defaultFalse()->end()
570587
->integerNode('default_lifetime')->end()
571-
->scalarNode('provider')
572-
->info('The service name to use as provider when the specified adapter needs one.')
573-
->end()
574588
->scalarNode('namespace')
575-
->info('The namespace where cached items are stored. Auto-generated by default. Set to false to disable namespacing.')
589+
->info('The namespace where cached items are stored. Auto-generated by default.')
576590
->end()
577-
->scalarNode('clearer')->defaultValue('cache.default_pools_clearer')->end()
578591
->end()
579592
->end()
580593
->end()

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+9Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,6 +1022,15 @@ private function registerPropertyInfoConfiguration(array $config, ContainerBuild
10221022

10231023
private function registerCacheConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
10241024
{
1025+
foreach ($config['adapters'] as $name => $adapterConfig) {
1026+
$adapterDefinition = new DefinitionDecorator($adapterConfig['parent']);
1027+
$adapterDefinition->setAbstract(true);
1028+
unset($adapterConfig['parent']);
1029+
1030+
$adapterDefinition->addTag('cache.pool', $adapterConfig);
1031+
$container->setDefinition('cache.adapter.'.$name, $adapterDefinition);
1032+
}
1033+
10251034
foreach ($config['pools'] as $name => $poolConfig) {
10261035
$poolDefinition = new DefinitionDecorator($poolConfig['adapter']);
10271036
$poolDefinition->setPublic($poolConfig['public']);

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Resources/config/cache_pools.xml
+25-19Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,52 +10,58 @@
1010
<tag name="kernel.cache_clearer" />
1111
</service>
1212

13-
<service id="cache.adapter.shared" alias="cache.adapter.filesystem" />
14-
<service id="cache.adapter.local" alias="cache.adapter.filesystem" />
15-
16-
<service id="cache.pool.shared" parent="cache.adapter.shared">
17-
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
18-
</service>
19-
20-
<service id="cache.pool.local" parent="cache.adapter.local">
21-
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
22-
</service>
23-
24-
<service id="cache.pool.validator" parent="cache.adapter.local" public="false">
25-
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
26-
</service>
27-
28-
<service id="cache.pool.serializer" parent="cache.adapter.local" public="false">
29-
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
30-
</service>
31-
3213
<service id="cache.adapter.apcu" class="Symfony\Component\Cache\Adapter\ApcuAdapter" abstract="true">
3314
<argument /> <!-- namespace -->
3415
<argument /> <!-- default lifetime -->
16+
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
3517
</service>
3618

3719
<service id="cache.adapter.doctrine" class="Symfony\Component\Cache\Adapter\DoctrineAdapter" abstract="true">
3820
<argument /> <!-- Doctrine provider service -->
3921
<argument /> <!-- namespace -->
4022
<argument /> <!-- default lifetime -->
23+
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
4124
</service>
4225

4326
<service id="cache.adapter.filesystem" class="Symfony\Component\Cache\Adapter\FilesystemAdapter" abstract="true">
4427
<argument /> <!-- namespace -->
4528
<argument /> <!-- default lifetime -->
4629
<argument>%kernel.cache_dir%/pools</argument>
30+
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
4731
</service>
4832

4933
<service id="cache.adapter.psr6" class="Symfony\Component\Cache\Adapter\ProxyAdapter" abstract="true">
5034
<argument /> <!-- PSR-6 provider service -->
5135
<argument /> <!-- namespace -->
5236
<argument /> <!-- default lifetime -->
37+
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
5338
</service>
5439

5540
<service id="cache.adapter.redis" class="Symfony\Component\Cache\Adapter\RedisAdapter" abstract="true">
5641
<argument /> <!-- Redis connection object -->
5742
<argument /> <!-- namespace -->
5843
<argument /> <!-- default lifetime -->
44+
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
45+
</service>
46+
47+
<service id="cache.adapter.shared" alias="cache.adapter.filesystem">
48+
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
49+
</service>
50+
51+
<service id="cache.adapter.local" alias="cache.adapter.filesystem">
52+
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
53+
</service>
54+
55+
<service id="cache.pool.app" parent="cache.adapter.shared">
56+
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
57+
</service>
58+
59+
<service id="cache.pool.validator" parent="cache.adapter.local" public="false">
60+
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
61+
</service>
62+
63+
<service id="cache.pool.serializer" parent="cache.adapter.local" public="false">
64+
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
5965
</service>
6066

6167
</services>

‎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
+10-2Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,16 +206,24 @@
206206

207207
<xsd:complexType name="cache">
208208
<xsd:choice minOccurs="1" maxOccurs="unbounded">
209+
<xsd:element name="adapter" type="cache_adapter" />
209210
<xsd:element name="pool" type="cache_pool" />
210211
</xsd:choice>
211212
</xsd:complexType>
212213

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" />
220+
</xsd:complexType>
221+
213222
<xsd:complexType name="cache_pool">
214223
<xsd:attribute name="name" type="xsd:string" use="required" />
215224
<xsd:attribute name="adapter" type="xsd:string" />
216225
<xsd:attribute name="public" type="xsd:boolean" />
217226
<xsd:attribute name="default-lifetime" type="xsd:integer" />
218-
<xsd:attribute name="provider" type="xsd:string" />
219-
<xsd:attribute name="clearer" type="xsd:string" />
227+
<xsd:attribute name="namespace" type="xsd:string" />
220228
</xsd:complexType>
221229
</xsd:schema>

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ protected static function getBundleDefaultConfig()
268268
'packages' => array(),
269269
),
270270
'cache' => array(
271+
'adapters' => array(),
271272
'pools' => array(),
272273
),
273274
);

‎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
+11Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
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+
),
516
'pools' => array(
617
'foo' => array(
718
'adapter' => 'cache.adapter.apcu',

‎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
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
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" />
1012
<framework:pool name="foo" adapter="cache.adapter.apcu" default-lifetime="30" />
1113
<framework:pool name="bar" adapter="cache.adapter.doctrine" default-lifetime="5" provider="app.doctrine_cache_provider" />
1214
<framework:pool name="baz" adapter="cache.adapter.filesystem" default-lifetime="7" />

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache.yml
+10Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,23 @@
11
framework:
22
cache:
3+
adapters:
4+
foo:
5+
parent: cache.adapter.filesystem
6+
default_lifetime: 30
7+
app_redis:
8+
parent: cache.adapter.redis
9+
provider: app.redis_connection
10+
default_lifetime: 30
311
pools:
412
foo:
513
adapter: cache.adapter.apcu
614
default_lifetime: 30
15+
namespace: foo
716
bar:
817
adapter: cache.adapter.doctrine
918
default_lifetime: 5
1019
provider: app.doctrine_cache_provider
20+
namespace: bar
1121
baz:
1222
adapter: cache.adapter.filesystem
1323
default_lifetime: 7

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
+61-8Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -577,15 +577,23 @@ public function testPropertyInfoEnabled()
577577
$this->assertTrue($container->has('property_info'));
578578
}
579579

580+
public function testCacheAdapterServices()
581+
{
582+
$container = $this->createContainerFromFile('cache');
583+
584+
$this->assertCacheAdaptersServiceDefinitionIsCreated($container, 'foo', 'cache.adapter.foo', null, 30);
585+
$this->assertCacheAdaptersServiceDefinitionIsCreated($container, 'app_redis', 'cache.adapter.redis', 'app.redis_connection', 30);
586+
}
587+
580588
public function testCachePoolServices()
581589
{
582590
$container = $this->createContainerFromFile('cache');
583591

584-
$this->assertCachePoolServiceDefinitionIsCreated($container, 'foo', 'cache.adapter.apcu', 30);
585-
$this->assertCachePoolServiceDefinitionIsCreated($container, 'bar', 'cache.adapter.doctrine', 5);
586-
$this->assertCachePoolServiceDefinitionIsCreated($container, 'baz', 'cache.adapter.filesystem', 7);
587-
$this->assertCachePoolServiceDefinitionIsCreated($container, 'foobar', 'cache.adapter.psr6', 10);
588-
$this->assertCachePoolServiceDefinitionIsCreated($container, 'def', 'cache.adapter.filesystem', 11);
592+
$this->assertCachePoolServiceDefinitionIsCreated($container, 'foo', 'cache.adapter.apcu', null, 30);
593+
$this->assertCachePoolServiceDefinitionIsCreated($container, 'bar', 'cache.adapter.doctrine', 'app.doctrine_cache_provider', 5);
594+
$this->assertCachePoolServiceDefinitionIsCreated($container, 'baz', 'cache.adapter.filesystem', null, 7);
595+
$this->assertCachePoolServiceDefinitionIsCreated($container, 'foobar', 'cache.adapter.psr6', 'app.cache_pool', 10);
596+
$this->assertCachePoolServiceDefinitionIsCreated($container, 'def', 'cache.adapter.filesystem', null, 11);
589597
}
590598

591599
protected function createContainer(array $data = array())
@@ -659,7 +667,47 @@ private function assertVersionStrategy(ContainerBuilder $container, Reference $r
659667
}
660668
}
661669

662-
private function assertCachePoolServiceDefinitionIsCreated(ContainerBuilder $container, $name, $adapter, $defaultLifetime)
670+
private function assertCacheAdaptersServiceDefinitionIsCreated(ContainerBuilder $container, $name, $parent, $provider, $defaultLifetime)
671+
{
672+
$id = 'cache.adapter.'.$name;
673+
674+
$this->assertTrue($container->has($id), sprintf('Service definition "%s" for cache adapter "%s" is registered', $id, $name));
675+
676+
$adapterDefinition = $container->getDefinition($id);
677+
678+
$this->assertTrue($adapterDefinition->hasTag('cache.pool'), sprintf('Service definition "%s" is tagged with the "cache.pool" tag.', $id));
679+
$this->assertTrue($adapterDefinition->isAbstract(), sprintf('Service definition "%s" is abstract.', $id));
680+
681+
$tag = $adapterDefinition->getTag('cache.pool');
682+
$this->assertTrue(isset($tag[0]['default_lifetime']), 'The default lifetime is stored as an attribute of the "cache.pool" tag.');
683+
$this->assertSame($defaultLifetime, $tag[0]['default_lifetime'], 'The default lifetime is stored as an attribute of the "cache.pool" tag.');
684+
685+
if ($provider) {
686+
$this->assertTrue(isset($tag[0]['provider']), 'The provider is stored as an attribute of the "cache.pool" tag.');
687+
$this->assertSame($provider, $tag[0]['provider'], 'The provider is stored as an attribute of the "cache.pool" tag.');
688+
} else {
689+
$this->assertFalse(isset($tag[0]['provider']), 'No provider is stored as an attribute of the "cache.pool" tag.');
690+
}
691+
692+
$this->assertInstanceOf(DefinitionDecorator::class, $adapterDefinition, sprintf('Cache adapter "%s" is based on a parent.', $name));
693+
694+
$adapterId = $adapterDefinition->getParent();
695+
$adapterDefinition = $container->findDefinition($adapterId);
696+
697+
switch ($parent) {
698+
case 'cache.adapter.apcu':
699+
$this->assertSame(ApcuAdapter::class, $adapterDefinition->getClass());
700+
break;
701+
case 'cache.adapter.doctrine':
702+
$this->assertSame(DoctrineAdapter::class, $adapterDefinition->getClass());
703+
break;
704+
case 'cache.adapter.filesystem':
705+
$this->assertSame(FilesystemAdapter::class, $adapterDefinition->getClass());
706+
break;
707+
}
708+
}
709+
710+
private function assertCachePoolServiceDefinitionIsCreated(ContainerBuilder $container, $name, $adapter, $provider, $defaultLifetime)
663711
{
664712
$id = 'cache.pool.'.$name;
665713

@@ -676,6 +724,13 @@ private function assertCachePoolServiceDefinitionIsCreated(ContainerBuilder $con
676724
$this->assertTrue(isset($tag[0]['default_lifetime']), 'The default lifetime is stored as an attribute of the "cache.pool" tag.');
677725
$this->assertSame($defaultLifetime, $tag[0]['default_lifetime'], 'The default lifetime is stored as an attribute of the "cache.pool" tag.');
678726

727+
if ($provider) {
728+
$this->assertTrue(isset($tag[0]['provider']), 'The provider is stored as an attribute of the "cache.pool" tag.');
729+
$this->assertSame($provider, $tag[0]['provider'], 'The provider is stored as an attribute of the "cache.pool" tag.');
730+
} else {
731+
$this->assertFalse(isset($tag[0]['provider']), 'No provider is stored as an attribute of the "cache.pool" tag.');
732+
}
733+
679734
$adapterId = $poolDefinition->getParent();
680735
$adapterDefinition = $container->findDefinition($adapterId);
681736

@@ -690,7 +745,5 @@ private function assertCachePoolServiceDefinitionIsCreated(ContainerBuilder $con
690745
$this->assertSame(FilesystemAdapter::class, $adapterDefinition->getClass());
691746
break;
692747
}
693-
694-
$this->assertTrue($adapterDefinition->isAbstract(), sprintf('Service definition "%s" is abstract.', $adapterId));
695748
}
696749
}

0 commit comments

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