Skip to content

Commit 07b42d9

Browse files
committed
[FrameworkBundle] cache ClassMetadataFactory in debug
We already track modification in serialization/validator config directory so we just need to clear the cache at warmup. Idea taken from apip: https://github.com/api-platform/core/blob/master/src/Bridge/Symfony/Bundle/CacheWarmer/CachePoolClearerCacheWarmer.php
1 parent 4e5b153 commit 07b42d9

File tree

3 files changed

+58
-4
lines changed

3 files changed

+58
-4
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace Symfony\Bundle\FrameworkBundle\CacheWarmer;
4+
5+
use Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer;
6+
use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface;
7+
8+
/**
9+
* Clears the cache pools when warming up the cache.
10+
*
11+
* Do not use in production!
12+
*
13+
* @author Kévin Dunglas <dunglas@gmail.com>
14+
*
15+
* @internal
16+
*/
17+
final class CachePoolClearerCacheWarmer implements CacheWarmerInterface
18+
{
19+
private $poolClearer;
20+
private $pools;
21+
22+
public function __construct(Psr6CacheClearer $poolClearer, array $pools = [])
23+
{
24+
$this->poolClearer = $poolClearer;
25+
$this->pools = $pools;
26+
}
27+
28+
/**
29+
* {@inheritdoc}
30+
*/
31+
public function warmUp($cacheDirectory): void
32+
{
33+
foreach ($this->pools as $pool) {
34+
if ($this->poolClearer->hasPool($pool)) {
35+
$this->poolClearer->clearPool($pool);
36+
}
37+
}
38+
}
39+
40+
/**
41+
* {@inheritdoc}
42+
*/
43+
public function isOptional(): bool
44+
{
45+
// optional cache warmers are not run when handling the request
46+
return false;
47+
}
48+
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1457,10 +1457,6 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
14571457
$chainLoader->replaceArgument(0, $serializerLoaders);
14581458
$container->getDefinition('serializer.mapping.cache_warmer')->replaceArgument(0, $serializerLoaders);
14591459

1460-
if ($container->getParameter('kernel.debug')) {
1461-
$container->removeDefinition('serializer.mapping.cache_class_metadata_factory');
1462-
}
1463-
14641460
if (isset($config['name_converter']) && $config['name_converter']) {
14651461
$container->getDefinition('serializer.name_converter.metadata_aware')->setArgument(1, new Reference($config['name_converter']));
14661462
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,15 @@
1111
<service id="data_collector.cache" class="Symfony\Component\Cache\DataCollector\CacheDataCollector" public="true">
1212
<tag name="data_collector" template="@WebProfiler/Collector/cache.html.twig" id="cache" priority="275" />
1313
</service>
14+
15+
<!-- CacheWarmer used in dev to clear cache pool -->
16+
<service id="cache_pool_clearer.cache_warmer" class="Symfony\Bundle\FrameworkBundle\CacheWarmer\CachePoolClearerCacheWarmer" public="false">
17+
<argument type="service" id="cache.system_clearer" />
18+
<argument type="collection">
19+
<argument>cache.validator</argument>
20+
<argument>cache.serializer</argument>
21+
</argument>
22+
<tag name="kernel.cache_warmer" priority="64" />
23+
</service>
1424
</services>
1525
</container>

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy