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 28fdb3a

Browse filesBrowse files
committed
Allow invalidateTags calls to be traced by data collector
1 parent 119ba3b commit 28fdb3a
Copy full SHA for 28fdb3a

File tree

2 files changed

+41
-18
lines changed
Filter options

2 files changed

+41
-18
lines changed

‎src/Symfony/Component/Cache/DependencyInjection/CacheCollectorPass.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Cache/DependencyInjection/CacheCollectorPass.php
+27-18Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -46,29 +46,38 @@ public function process(ContainerBuilder $container)
4646
return;
4747
}
4848

49-
$collectorDefinition = $container->getDefinition($this->dataCollectorCacheId);
5049
foreach ($container->findTaggedServiceIds($this->cachePoolTag) as $id => $attributes) {
51-
$definition = $container->getDefinition($id);
52-
if ($definition->isAbstract()) {
53-
continue;
54-
}
50+
$this->addToCollector($id, $container);
5551

56-
$recorder = new Definition(is_subclass_of($definition->getClass(), TagAwareAdapterInterface::class) ? TraceableTagAwareAdapter::class : TraceableAdapter::class);
57-
$recorder->setTags($definition->getTags());
58-
if (!$definition->isPublic() || !$definition->isPrivate()) {
59-
$recorder->setPublic($definition->isPublic());
52+
if (($attributes[0]['name'] ?? $id) !== $id) {
53+
$this->addToCollector($attributes[0]['name'], $container);
6054
}
61-
$recorder->setArguments([new Reference($innerId = $id.$this->cachePoolRecorderInnerSuffix)]);
62-
63-
$definition->setTags([]);
64-
$definition->setPublic(false);
55+
}
56+
}
6557

66-
$container->setDefinition($innerId, $definition);
67-
$container->setDefinition($id, $recorder);
58+
private function addToCollector(string $id, ContainerBuilder $container)
59+
{
60+
$definition = $container->getDefinition($id);
61+
if ($definition->isAbstract()) {
62+
return;
63+
}
6864

69-
// Tell the collector to add the new instance
70-
$collectorDefinition->addMethodCall('addInstance', [$id, new Reference($id)]);
71-
$collectorDefinition->setPublic(false);
65+
$collectorDefinition = $container->getDefinition($this->dataCollectorCacheId);
66+
$recorder = new Definition(is_subclass_of($definition->getClass(), TagAwareAdapterInterface::class) ? TraceableTagAwareAdapter::class : TraceableAdapter::class);
67+
$recorder->setTags($definition->getTags());
68+
if (!$definition->isPublic() || !$definition->isPrivate()) {
69+
$recorder->setPublic($definition->isPublic());
7270
}
71+
$recorder->setArguments([new Reference($innerId = $id.$this->cachePoolRecorderInnerSuffix)]);
72+
73+
$definition->setTags([]);
74+
$definition->setPublic(false);
75+
76+
$container->setDefinition($innerId, $definition);
77+
$container->setDefinition($id, $recorder);
78+
79+
// Tell the collector to add the new instance
80+
$collectorDefinition->addMethodCall('addInstance', [$id, new Reference($id)]);
81+
$collectorDefinition->setPublic(false);
7382
}
7483
}

‎src/Symfony/Component/Cache/Tests/DependencyInjection/CacheCollectorPassTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Cache/Tests/DependencyInjection/CacheCollectorPassTest.php
+14Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
16+
use Symfony\Component\Cache\Adapter\PhpArrayAdapter;
1617
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
1718
use Symfony\Component\Cache\Adapter\TraceableAdapter;
1819
use Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter;
@@ -34,16 +35,29 @@ public function testProcess()
3435
->addArgument(new Reference('fs'))
3536
->addTag('cache.pool');
3637

38+
$container
39+
->register('.php.inner', PhpArrayAdapter::class)
40+
->addTag('cache.pool', ['name' => 'php']);
41+
$container
42+
->register('php', TagAwareAdapter::class)
43+
->addArgument(new Reference('.php.inner'));
44+
3745
$collector = $container->register('data_collector.cache', CacheDataCollector::class);
3846
(new CacheCollectorPass())->process($container);
3947

4048
$this->assertEquals([
4149
['addInstance', ['fs', new Reference('fs')]],
4250
['addInstance', ['tagged_fs', new Reference('tagged_fs')]],
51+
['addInstance', ['.php.inner', new Reference('.php.inner')]],
52+
['addInstance', ['php', new Reference('php')]],
4353
], $collector->getMethodCalls());
4454

4555
$this->assertSame(TraceableAdapter::class, $container->findDefinition('fs')->getClass());
4656
$this->assertSame(TraceableTagAwareAdapter::class, $container->getDefinition('tagged_fs')->getClass());
57+
58+
$this->assertSame(TraceableAdapter::class, $container->findDefinition('.php.inner')->getClass());
59+
$this->assertSame(TraceableTagAwareAdapter::class, $container->getDefinition('php')->getClass());
60+
4761
$this->assertFalse($collector->isPublic(), 'The "data_collector.cache" should be private after processing');
4862
}
4963
}

0 commit comments

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