Skip to content

Commit 3e913fb

Browse files
author
Thomas Rabaix
committed
Fix cache management
1 parent 03647f1 commit 3e913fb

File tree

10 files changed

+47
-22
lines changed

10 files changed

+47
-22
lines changed

Adapter/EsiCache.php

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,14 @@ public function has(array $keys)
111111
*/
112112
public function get(array $keys)
113113
{
114+
if (!isset($keys['controller'])) {
115+
throw new \RuntimeException('Please define a controller key');
116+
}
117+
118+
if (!isset($keys['parameters'])) {
119+
throw new \RuntimeException('Please define a parameters key');
120+
}
121+
114122
$content = sprintf('<esi:include src="%s"/>', $this->getUrl($keys));
115123

116124
return new CacheElement($keys, new Response($content));
@@ -135,7 +143,7 @@ protected function getUrl(array $keys)
135143
'parameters' => $keys
136144
);
137145

138-
return $this->router->generate('sonata_page_esi_cache', $parameters, true);
146+
return $this->router->generate('sonata_cache_esi', $parameters, true);
139147
}
140148

141149
/**
@@ -165,11 +173,9 @@ public function cacheAction(Request $request)
165173
$parameters = $request->get('parameters', array());
166174

167175
if ($request->get('token') != $this->computeHash($parameters)) {
168-
throw new AccessDeniedHttpException('Invalid token'.$this->computeHash($parameters));
176+
throw new AccessDeniedHttpException('Invalid token');
169177
}
170178

171-
$parameters['_controller'] = $request->get('controller');
172-
173179
$subRequest = Request::create('', 'get', $parameters, $request->cookies->all(), array(), $request->server->all());
174180

175181
$controller = $this->resolver->getController($subRequest);

Cache/CacheManager.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ class CacheManager implements CacheManagerInterface
2727

2828
/**
2929
* @param \Sonata\CacheBundle\Invalidation\InvalidationInterface $cacheInvalidation
30+
* @param array $cacheServices
3031
*/
31-
public function __construct(InvalidationInterface $cacheInvalidation)
32+
public function __construct(InvalidationInterface $cacheInvalidation, array $cacheServices)
3233
{
3334
$this->cacheInvalidation = $cacheInvalidation;
35+
$this->cacheServices = $cacheServices;
3436
}
3537

3638
/**

DependencyInjection/Compiler/TweakCompilerPass.php renamed to DependencyInjection/Compiler/CacheCompilerPass.php

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,31 @@
2121
*
2222
* @author Thomas Rabaix <[email protected]>
2323
*/
24-
class TweakCompilerPass implements CompilerPassInterface
24+
class CacheCompilerPass implements CompilerPassInterface
2525
{
2626
/**
2727
* {@inheritDoc}
2828
*/
2929
public function process(ContainerBuilder $container)
3030
{
31-
if ($container->hasDefinition('sonata.cache.orm.event_subscriber.default')) {
32-
$ormListener = $container->getDefinition('sonata.cache.orm.event_subscriber.default');
33-
foreach ($container->findTaggedServiceIds('sonata.cache') as $id => $attributes) {
34-
if (!$container->hasDefinition($id)) {
35-
continue;
36-
}
31+
$caches = array();
3732

38-
$ormListener->addMethodCall('addCache', array(new Reference($id)));
33+
foreach ($container->findTaggedServiceIds('sonata.cache') as $id => $attributes) {
34+
if (!$container->hasDefinition($id)) {
35+
continue;
3936
}
37+
38+
$caches[$id] = new Reference($id);
39+
}
40+
41+
if ($container->hasDefinition('sonata.cache.orm.event_subscriber.default')) {
42+
$container->getDefinition('sonata.cache.orm.event_subscriber.default')
43+
->replaceArgument(1, $caches);
44+
}
45+
46+
if ($container->hasDefinition('sonata.cache.manager')) {
47+
$container->getDefinition('sonata.cache.manager')
48+
->replaceArgument(1, $caches);
4049
}
4150
}
4251
}

DependencyInjection/SonataCacheExtension.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public function configureCache(ContainerBuilder $container, $config)
114114
$container->removeDefinition('sonata.cache.mongo');
115115
}
116116

117-
if (isset($configs['caches']['memcached'])) {
117+
if (isset($config['caches']['memcached'])) {
118118

119119
if (!class_exists('\Memcached', true)) {
120120
throw new \RuntimeException(<<<HELP
@@ -135,7 +135,7 @@ public function configureCache(ContainerBuilder $container, $config)
135135
$container->removeDefinition('sonata.cache.memcached');
136136
}
137137

138-
if (isset($configs['caches']['apc'])) {
138+
if (isset($config['caches']['apc'])) {
139139

140140
if (!function_exists('apc_fetch')) {
141141
throw new \RuntimeException(<<<HELP

Invalidation/DoctrineORMListener.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,13 @@ class DoctrineORMListener implements EventSubscriber
2323

2424
protected $collectionIdentifiers;
2525

26-
public function __construct(ModelCollectionIdentifiers $collectionIdentifiers)
26+
public function __construct(ModelCollectionIdentifiers $collectionIdentifiers, $caches)
2727
{
2828
$this->collectionIdentifiers = $collectionIdentifiers;
29+
30+
foreach ($caches as $cache) {
31+
$this->addCache($cache);
32+
}
2933
}
3034

3135
public function getSubscribedEvents()

Resources/config/cache.xml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
<service id="sonata.cache.manager" class="Sonata\CacheBundle\Cache\CacheManager" >
99
<argument />
10+
<argument />
1011
</service>
1112

1213

@@ -18,7 +19,9 @@
1819
<argument type="collection" />
1920
</service>
2021

21-
<service id="sonata.cache.noop" class="Sonata\CacheBundle\Adapter\NoopCache" />
22+
<service id="sonata.cache.noop" class="Sonata\CacheBundle\Adapter\NoopCache">
23+
<tag name="sonata.cache" />
24+
</service>
2225

2326
<service id="sonata.cache.mongo" class="Sonata\CacheBundle\Adapter\MongoCache" >
2427
<tag name="sonata.cache" />
@@ -41,7 +44,7 @@
4144
<argument type="collection" />
4245
</service>
4346

44-
<service id="sonata.cache.esi" class="Sonata\CacheBundle\Cache\EsiCache">
47+
<service id="sonata.cache.esi" class="Sonata\CacheBundle\Adapter\EsiCache">
4548
<tag name="sonata.cache" />
4649
<argument />
4750
<argument type="collection" />

Resources/config/orm.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
<service id="sonata.cache.orm.event_subscriber.default" class="Sonata\CacheBundle\Invalidation\DoctrineORMListener" >
1010
<argument type="service" id="sonata.cache.model_identifier" />
11+
<argument />
1112
</service>
1213

1314
<service id="sonata.cache.orm.event_subscriber" class="Sonata\CacheBundle\Invalidation\DoctrineORMListenerContainerAware">

SonataCacheBundle.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212

1313
use Symfony\Component\HttpKernel\Bundle\Bundle;
1414
use Symfony\Component\DependencyInjection\ContainerBuilder;
15-
use Sonata\CacheBundle\DependencyInjection\Compiler\TweakCompilerPass;
15+
use Sonata\CacheBundle\DependencyInjection\Compiler\CacheCompilerPass;
1616

1717
class SonataCacheBundle extends Bundle
1818
{
1919
public function build(ContainerBuilder $container)
2020
{
2121
parent::build($container);
2222

23-
$container->addCompilerPass(new TweakCompilerPass());
23+
$container->addCompilerPass(new CacheCompilerPass());
2424
}
2525

2626
public function boot()

Tests/Adapter/EsiCacheTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function testInitCache()
3939

4040
$this->assertTrue($cache->has(array('id' => 7)));
4141

42-
$cacheElement = $cache->get(array('id' => 7));
42+
$cacheElement = $cache->get(array('id' => 7, 'controller' => 'foo.service::runAction', 'parameters' => array()));
4343

4444
$this->assertInstanceOf('Sonata\CacheBundle\Cache\CacheElement', $cacheElement);
4545

Tests/Invalidation/DoctrineORMListenerTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function test()
3333
{
3434
$collection = new ModelCollectionIdentifiers;
3535

36-
$listener = new DoctrineORMListener($collection);
36+
$listener = new DoctrineORMListener($collection, array());
3737

3838
$event = $this->getMock('Doctrine\ORM\Event\LifecycleEventArgs', array(), array(), '', false);
3939
$event->expects($this->exactly(4))

0 commit comments

Comments
 (0)