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

Skip to content

Commit 28703e5

Browse files
committed
moving Cache-related compiler pass from FrameworkBundle to Cache component
1 parent f0168e3 commit 28703e5

18 files changed

+368
-253
lines changed

src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ CHANGELOG
99
* Deprecated auto-injection of the container in AbstractController instances, register them as service subscribers instead
1010
* Deprecated processing of services tagged `security.expression_language_provider` in favor of a new `AddExpressionLanguageProvidersPass` in SecurityBundle.
1111
* Enabled autoconfiguration for `Psr\Log\LoggerAwareInterface`
12+
* Deprecated `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CacheCollectorPass`. Use `Symfony\Component\Cache\DependencyInjection\CacheCollectorPass` instead.
13+
* Deprecated `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolClearerPass`. Use `Symfony\Component\Cache\DependencyInjection\CachePoolClearerPass` instead.
14+
* Deprecated `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolPass`. Use `Symfony\Component\Cache\DependencyInjection\CachePoolPass` instead.
15+
* Deprecated `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolPrunerPass`. Use `Symfony\Component\Cache\DependencyInjection\CachePoolPrunerPass` instead.
1216

1317
4.1.0
1418
-----

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CacheCollectorPass.php

Lines changed: 6 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -11,51 +11,17 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
1313

14-
use Symfony\Component\Cache\Adapter\TagAwareAdapterInterface;
15-
use Symfony\Component\Cache\Adapter\TraceableAdapter;
16-
use Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter;
17-
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
18-
use Symfony\Component\DependencyInjection\ContainerBuilder;
19-
use Symfony\Component\DependencyInjection\Definition;
20-
use Symfony\Component\DependencyInjection\Reference;
14+
@trigger_error(sprintf('%s is deprecated since version 4.2 and will be removed in 5.0. Use Symfony\Component\Cache\DependencyInjection\CacheCollectorPass instead.', CacheCollectorPass::class), E_USER_DEPRECATED);
15+
16+
use Symfony\Component\Cache\DependencyInjection\CacheCollectorPass as BaseCacheCollectorPass;
2117

2218
/**
2319
* Inject a data collector to all the cache services to be able to get detailed statistics.
2420
*
2521
* @author Tobias Nyholm <[email protected]>
22+
*
23+
* @deprecated since version 4.2, to be removed in 5.0. Use Symfony\Component\Cache\DependencyInjection\CacheCollectorPass instead.
2624
*/
27-
class CacheCollectorPass implements CompilerPassInterface
25+
class CacheCollectorPass extends BaseCacheCollectorPass
2826
{
29-
/**
30-
* {@inheritdoc}
31-
*/
32-
public function process(ContainerBuilder $container)
33-
{
34-
if (!$container->hasDefinition('data_collector.cache')) {
35-
return;
36-
}
37-
38-
$collectorDefinition = $container->getDefinition('data_collector.cache');
39-
foreach ($container->findTaggedServiceIds('cache.pool') as $id => $attributes) {
40-
$definition = $container->getDefinition($id);
41-
if ($definition->isAbstract()) {
42-
continue;
43-
}
44-
45-
$recorder = new Definition(is_subclass_of($definition->getClass(), TagAwareAdapterInterface::class) ? TraceableTagAwareAdapter::class : TraceableAdapter::class);
46-
$recorder->setTags($definition->getTags());
47-
$recorder->setPublic($definition->isPublic());
48-
$recorder->setArguments(array(new Reference($innerId = $id.'.recorder_inner')));
49-
50-
$definition->setTags(array());
51-
$definition->setPublic(false);
52-
53-
$container->setDefinition($innerId, $definition);
54-
$container->setDefinition($id, $recorder);
55-
56-
// Tell the collector to add the new instance
57-
$collectorDefinition->addMethodCall('addInstance', array($id, new Reference($id)));
58-
$collectorDefinition->setPublic(false);
59-
}
60-
}
6127
}

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CachePoolClearerPass.php

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,15 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
1313

14-
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
15-
use Symfony\Component\DependencyInjection\ContainerBuilder;
16-
use Symfony\Component\DependencyInjection\Reference;
14+
@trigger_error(sprintf('%s is deprecated since version 4.2 and will be removed in 5.0. Use Symfony\Component\Cache\DependencyInjection\CachePoolClearerPass instead.', CachePoolClearerPass::class), E_USER_DEPRECATED);
15+
16+
use Symfony\Component\Cache\DependencyInjection\CachePoolClearerPass as BaseCachePoolClearerPass;
1717

1818
/**
1919
* @author Nicolas Grekas <[email protected]>
20+
*
21+
* @deprecated since version 4.2, to be removed in 5.0. Use Symfony\Component\Cache\DependencyInjection\CachePoolClearerPass instead.
2022
*/
21-
final class CachePoolClearerPass implements CompilerPassInterface
23+
class CachePoolClearerPass extends BaseCachePoolClearerPass
2224
{
23-
/**
24-
* {@inheritdoc}
25-
*/
26-
public function process(ContainerBuilder $container)
27-
{
28-
$container->getParameterBag()->remove('cache.prefix.seed');
29-
30-
foreach ($container->findTaggedServiceIds('cache.pool.clearer') as $id => $attr) {
31-
$clearer = $container->getDefinition($id);
32-
$pools = array();
33-
foreach ($clearer->getArgument(0) as $name => $ref) {
34-
if ($container->hasDefinition($ref)) {
35-
$pools[$name] = new Reference($ref);
36-
}
37-
}
38-
$clearer->replaceArgument(0, $pools);
39-
}
40-
}
4125
}

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

Lines changed: 6 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -11,140 +11,15 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
1313

14-
use Symfony\Component\Cache\Adapter\AbstractAdapter;
15-
use Symfony\Component\Cache\Adapter\ArrayAdapter;
16-
use Symfony\Component\DependencyInjection\ChildDefinition;
17-
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
18-
use Symfony\Component\DependencyInjection\ContainerBuilder;
19-
use Symfony\Component\DependencyInjection\Definition;
20-
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
21-
use Symfony\Component\DependencyInjection\Reference;
14+
@trigger_error(sprintf('%s is deprecated since version 4.2 and will be removed in 5.0. Use Symfony\Component\Cache\DependencyInjection\CachePoolPass instead.', CachePoolPass::class), E_USER_DEPRECATED);
15+
16+
use Symfony\Component\Cache\DependencyInjection\CachePoolPass as BaseCachePoolPass;
2217

2318
/**
2419
* @author Nicolas Grekas <[email protected]>
20+
*
21+
* @deprecated since version 4.2, to be removed in 5.0. Use Symfony\Component\Cache\DependencyInjection\CachePoolPass instead.
2522
*/
26-
class CachePoolPass implements CompilerPassInterface
23+
class CachePoolPass extends BaseCachePoolPass
2724
{
28-
/**
29-
* {@inheritdoc}
30-
*/
31-
public function process(ContainerBuilder $container)
32-
{
33-
if ($container->hasParameter('cache.prefix.seed')) {
34-
$seed = '.'.$container->getParameterBag()->resolveValue($container->getParameter('cache.prefix.seed'));
35-
} else {
36-
$seed = '_'.$container->getParameter('kernel.root_dir');
37-
}
38-
$seed .= '.'.$container->getParameter('kernel.name').'.'.$container->getParameter('kernel.environment');
39-
40-
$pools = array();
41-
$clearers = array();
42-
$attributes = array(
43-
'provider',
44-
'name',
45-
'namespace',
46-
'default_lifetime',
47-
'reset',
48-
);
49-
foreach ($container->findTaggedServiceIds('cache.pool') as $id => $tags) {
50-
$adapter = $pool = $container->getDefinition($id);
51-
if ($pool->isAbstract()) {
52-
continue;
53-
}
54-
while ($adapter instanceof ChildDefinition) {
55-
$adapter = $container->findDefinition($adapter->getParent());
56-
if ($t = $adapter->getTag('cache.pool')) {
57-
$tags[0] += $t[0];
58-
}
59-
}
60-
$name = $tags[0]['name'] ?? $id;
61-
if (!isset($tags[0]['namespace'])) {
62-
$tags[0]['namespace'] = $this->getNamespace($seed, $name);
63-
}
64-
if (isset($tags[0]['clearer'])) {
65-
$clearer = $tags[0]['clearer'];
66-
while ($container->hasAlias($clearer)) {
67-
$clearer = (string) $container->getAlias($clearer);
68-
}
69-
} else {
70-
$clearer = null;
71-
}
72-
unset($tags[0]['clearer'], $tags[0]['name']);
73-
74-
if (isset($tags[0]['provider'])) {
75-
$tags[0]['provider'] = new Reference(static::getServiceProvider($container, $tags[0]['provider']));
76-
}
77-
$i = 0;
78-
foreach ($attributes as $attr) {
79-
if (!isset($tags[0][$attr])) {
80-
// no-op
81-
} elseif ('reset' === $attr) {
82-
if ($tags[0][$attr]) {
83-
$pool->addTag('kernel.reset', array('method' => $tags[0][$attr]));
84-
}
85-
} elseif ('namespace' !== $attr || ArrayAdapter::class !== $adapter->getClass()) {
86-
$pool->replaceArgument($i++, $tags[0][$attr]);
87-
}
88-
unset($tags[0][$attr]);
89-
}
90-
if (!empty($tags[0])) {
91-
throw new InvalidArgumentException(sprintf('Invalid "cache.pool" tag for service "%s": accepted attributes are "clearer", "provider", "name", "namespace", "default_lifetime" and "reset", found "%s".', $id, implode('", "', array_keys($tags[0]))));
92-
}
93-
94-
if (null !== $clearer) {
95-
$clearers[$clearer][$name] = new Reference($id, $container::IGNORE_ON_UNINITIALIZED_REFERENCE);
96-
}
97-
98-
$pools[$name] = new Reference($id, $container::IGNORE_ON_UNINITIALIZED_REFERENCE);
99-
}
100-
101-
$clearer = 'cache.global_clearer';
102-
while ($container->hasAlias($clearer)) {
103-
$clearer = (string) $container->getAlias($clearer);
104-
}
105-
if ($container->hasDefinition($clearer)) {
106-
$clearers['cache.global_clearer'] = $pools;
107-
}
108-
109-
foreach ($clearers as $id => $pools) {
110-
$clearer = $container->getDefinition($id);
111-
if ($clearer instanceof ChildDefinition) {
112-
$clearer->replaceArgument(0, $pools);
113-
} else {
114-
$clearer->setArgument(0, $pools);
115-
}
116-
$clearer->addTag('cache.pool.clearer');
117-
118-
if ('cache.system_clearer' === $id) {
119-
$clearer->addTag('kernel.cache_clearer');
120-
}
121-
}
122-
}
123-
124-
private function getNamespace($seed, $id)
125-
{
126-
return substr(str_replace('/', '-', base64_encode(hash('sha256', $id.$seed, true))), 0, 10);
127-
}
128-
129-
/**
130-
* @internal
131-
*/
132-
public static function getServiceProvider(ContainerBuilder $container, $name)
133-
{
134-
$container->resolveEnvPlaceholders($name, null, $usedEnvs);
135-
136-
if ($usedEnvs || preg_match('#^[a-z]++://#', $name)) {
137-
$dsn = $name;
138-
139-
if (!$container->hasDefinition($name = '.cache_connection.'.ContainerBuilder::hash($dsn))) {
140-
$definition = new Definition(AbstractAdapter::class);
141-
$definition->setPublic(false);
142-
$definition->setFactory(array(AbstractAdapter::class, 'createConnection'));
143-
$definition->setArguments(array($dsn, array('lazy' => true)));
144-
$container->setDefinition($name, $definition);
145-
}
146-
}
147-
148-
return $name;
149-
}
15025
}

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CachePoolPrunerPass.php

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -11,50 +11,15 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
1313

14-
use Symfony\Component\Cache\PruneableInterface;
15-
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
16-
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
17-
use Symfony\Component\DependencyInjection\ContainerBuilder;
18-
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
19-
use Symfony\Component\DependencyInjection\Reference;
14+
@trigger_error(sprintf('%s is deprecated since version 4.2 and will be removed in 5.0. Use Symfony\Component\Cache\DependencyInjection\CachePoolPrunerPass instead.', CachePoolPrunerPass::class), E_USER_DEPRECATED);
15+
16+
use Symfony\Component\Cache\DependencyInjection\CachePoolPrunerPass as BaseCachePoolPrunerPass;
2017

2118
/**
2219
* @author Rob Frawley 2nd <[email protected]>
20+
*
21+
* @deprecated since version 4.2, to be removed in 5.0. Use Symfony\Component\Cache\DependencyInjection\CachePoolPrunerPass instead.
2322
*/
24-
class CachePoolPrunerPass implements CompilerPassInterface
23+
class CachePoolPrunerPass extends BaseCachePoolPrunerPass
2524
{
26-
private $cacheCommandServiceId;
27-
private $cachePoolTag;
28-
29-
public function __construct(string $cacheCommandServiceId = 'console.command.cache_pool_prune', string $cachePoolTag = 'cache.pool')
30-
{
31-
$this->cacheCommandServiceId = $cacheCommandServiceId;
32-
$this->cachePoolTag = $cachePoolTag;
33-
}
34-
35-
/**
36-
* {@inheritdoc}
37-
*/
38-
public function process(ContainerBuilder $container)
39-
{
40-
if (!$container->hasDefinition($this->cacheCommandServiceId)) {
41-
return;
42-
}
43-
44-
$services = array();
45-
46-
foreach ($container->findTaggedServiceIds($this->cachePoolTag) as $id => $tags) {
47-
$class = $container->getParameterBag()->resolveValue($container->getDefinition($id)->getClass());
48-
49-
if (!$reflection = $container->getReflectionClass($class)) {
50-
throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id));
51-
}
52-
53-
if ($reflection->implementsInterface(PruneableInterface::class)) {
54-
$services[$id] = new Reference($id);
55-
}
56-
}
57-
58-
$container->getDefinition($this->cacheCommandServiceId)->replaceArgument(0, new IteratorArgument($services));
59-
}
6025
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use Symfony\Component\Cache\Adapter\AdapterInterface;
2626
use Symfony\Component\Cache\Adapter\ArrayAdapter;
2727
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
28+
use Symfony\Component\Cache\DependencyInjection\CachePoolPass;
2829
use Symfony\Component\Cache\Marshaller\DefaultMarshaller;
2930
use Symfony\Component\Cache\Marshaller\MarshallerInterface;
3031
use Symfony\Component\Cache\ResettableInterface;
@@ -1578,7 +1579,7 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
15781579
}
15791580
foreach (array('doctrine', 'psr6', 'redis', 'memcached', 'pdo') as $name) {
15801581
if (isset($config[$name = 'default_'.$name.'_provider'])) {
1581-
$container->setAlias('cache.'.$name, new Alias(Compiler\CachePoolPass::getServiceProvider($container, $config[$name]), false));
1582+
$container->setAlias('cache.'.$name, new Alias(CachePoolPass::getServiceProvider($container, $config[$name]), false));
15821583
}
15831584
}
15841585
foreach (array('app', 'system') as $name) {

src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@
1414
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddAnnotationsCachedReaderPass;
1515
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddDebugLogProcessorPass;
1616
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddExpressionLanguageProvidersPass;
17-
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CacheCollectorPass;
18-
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolClearerPass;
19-
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolPass;
20-
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolPrunerPass;
2117
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ContainerBuilderDebugDumpPass;
2218
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\DataCollectorTranslatorPass;
2319
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\LoggingTranslatorPass;
@@ -27,6 +23,10 @@
2723
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TestServiceContainerWeakRefPass;
2824
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\UnusedTagsPass;
2925
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\WorkflowGuardListenerPass;
26+
use Symfony\Component\Cache\DependencyInjection\CacheCollectorPass;
27+
use Symfony\Component\Cache\DependencyInjection\CachePoolClearerPass;
28+
use Symfony\Component\Cache\DependencyInjection\CachePoolPass;
29+
use Symfony\Component\Cache\DependencyInjection\CachePoolPrunerPass;
3030
use Symfony\Component\Config\Resource\ClassExistenceResource;
3131
use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass;
3232
use Symfony\Component\Debug\ErrorHandler;

src/Symfony/Bundle/FrameworkBundle/composer.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"require": {
1919
"php": "^7.1.3",
2020
"ext-xml": "*",
21-
"symfony/cache": "~3.4|~4.0",
21+
"symfony/cache": "~4.2",
2222
"symfony/dependency-injection": "^4.2",
2323
"symfony/config": "~4.2",
2424
"symfony/event-dispatcher": "^4.1",
@@ -73,7 +73,8 @@
7373
"symfony/translation": "<3.4",
7474
"symfony/twig-bridge": "<4.1.1",
7575
"symfony/validator": "<4.1",
76-
"symfony/workflow": "<4.1"
76+
"symfony/workflow": "<4.1",
77+
"symfony/cache": "<4.2"
7778
},
7879
"suggest": {
7980
"ext-apcu": "For best performance of the system caches",

src/Symfony/Component/Cache/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ CHANGELOG
1313
* deprecated `CacheItem::getPreviousTags()`, use `CacheItem::getMetadata()` instead
1414
* deprecated the `AbstractAdapter::createSystemCache()` method
1515
* deprecated the `AbstractAdapter::unserialize()` and `AbstractCache::unserialize()` methods
16+
* added `CacheCollectorPass` (originally in `FrameworkBundle`)
17+
* added `CachePoolClearerPass` (originally in `FrameworkBundle`)
18+
* added `CachePoolPass` (originally in `FrameworkBundle`)
19+
* added `CachePoolPrunerPass` (originally in `FrameworkBundle`)
1620

1721
3.4.0
1822
-----

0 commit comments

Comments
 (0)