bug #23018 [FrameworkBundle] Fix CacheCollectorPass priority (chalasr)
This PR was merged into the 3.3 branch.
Discussion
----------
[FrameworkBundle] Fix CacheCollectorPass priority
| Q | A
| ------------- | ---
| Branch? | 3.3
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR | https://github.com/symfony/symfony/pull/22960#issuecomment-305460507
It was run before optimization, so child definitions were not resolved yet.
Commits
-------
28b253ab40
Fix CacheCollectorPass priority
This commit is contained in:
commit
156a50d124
@ -16,6 +16,7 @@ use Symfony\Component\Cache\Adapter\TraceableAdapter;
|
|||||||
use Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter;
|
use Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter;
|
||||||
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\DependencyInjection\Definition;
|
||||||
use Symfony\Component\DependencyInjection\Reference;
|
use Symfony\Component\DependencyInjection\Reference;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,13 +42,25 @@ class CacheCollectorPass implements CompilerPassInterface
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$container->register($id.'.recorder', is_subclass_of($definition->getClass(), TagAwareAdapterInterface::class) ? TraceableTagAwareAdapter::class : TraceableAdapter::class)
|
$recorder = new Definition(is_subclass_of($definition->getClass(), TagAwareAdapterInterface::class) ? TraceableTagAwareAdapter::class : TraceableAdapter::class);
|
||||||
->setDecoratedService($id)
|
$recorder->setTags($definition->getTags());
|
||||||
->addArgument(new Reference($id.'.recorder.inner'))
|
$recorder->setPublic($definition->isPublic());
|
||||||
->setPublic(false);
|
$recorder->setArguments(array(new Reference($innerId = $id.'.recorder_inner')));
|
||||||
|
|
||||||
|
$definition->setTags(array());
|
||||||
|
$definition->setPublic(false);
|
||||||
|
|
||||||
|
if ($types = $definition->getAutowiringTypes(false)) {
|
||||||
|
$recorder->setAutowiringTypes($types);
|
||||||
|
$definition->setAutowiringTypes(array());
|
||||||
|
}
|
||||||
|
|
||||||
|
$container->setDefinition($innerId, $definition);
|
||||||
|
$container->setDefinition($id, $recorder);
|
||||||
|
|
||||||
// Tell the collector to add the new instance
|
// Tell the collector to add the new instance
|
||||||
$collectorDefinition->addMethodCall('addInstance', array($id, new Reference($id)));
|
$collectorDefinition->addMethodCall('addInstance', array($id, new Reference($id)));
|
||||||
|
$collectorDefinition->setPublic(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ class FrameworkBundle extends Bundle
|
|||||||
$container->addCompilerPass(new UnusedTagsPass(), PassConfig::TYPE_AFTER_REMOVING);
|
$container->addCompilerPass(new UnusedTagsPass(), PassConfig::TYPE_AFTER_REMOVING);
|
||||||
$container->addCompilerPass(new ContainerBuilderDebugDumpPass(), PassConfig::TYPE_BEFORE_REMOVING, -255);
|
$container->addCompilerPass(new ContainerBuilderDebugDumpPass(), PassConfig::TYPE_BEFORE_REMOVING, -255);
|
||||||
$this->addCompilerPassIfExists($container, ConfigCachePass::class);
|
$this->addCompilerPassIfExists($container, ConfigCachePass::class);
|
||||||
$container->addCompilerPass(new CacheCollectorPass());
|
$container->addCompilerPass(new CacheCollectorPass(), PassConfig::TYPE_BEFORE_REMOVING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
<services>
|
<services>
|
||||||
<defaults public="false" />
|
<defaults public="false" />
|
||||||
|
|
||||||
<!-- DataCollector -->
|
<!-- DataCollector (public to prevent inlining, made private in CacheCollectorPass) -->
|
||||||
<service id="data_collector.cache" class="Symfony\Component\Cache\DataCollector\CacheDataCollector">
|
<service id="data_collector.cache" class="Symfony\Component\Cache\DataCollector\CacheDataCollector" public="true">
|
||||||
<tag name="data_collector" template="@WebProfiler/Collector/cache.html.twig" id="cache" priority="275" />
|
<tag name="data_collector" template="@WebProfiler/Collector/cache.html.twig" id="cache" priority="275" />
|
||||||
</service>
|
</service>
|
||||||
</services>
|
</services>
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CacheCollectorPass;
|
||||||
|
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\TraceableAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter;
|
||||||
|
use Symfony\Component\Cache\DataCollector\CacheDataCollector;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\DependencyInjection\Reference;
|
||||||
|
|
||||||
|
class CacheCollectorPassTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testProcess()
|
||||||
|
{
|
||||||
|
$container = new ContainerBuilder();
|
||||||
|
$container
|
||||||
|
->register('fs', FilesystemAdapter::class)
|
||||||
|
->addTag('cache.pool');
|
||||||
|
$container
|
||||||
|
->register('tagged_fs', TagAwareAdapter::class)
|
||||||
|
->addArgument(new Reference('fs'))
|
||||||
|
->addTag('cache.pool');
|
||||||
|
|
||||||
|
$collector = $container->register('data_collector.cache', CacheDataCollector::class);
|
||||||
|
(new CacheCollectorPass())->process($container);
|
||||||
|
|
||||||
|
$this->assertEquals(array(
|
||||||
|
array('addInstance', array('fs', new Reference('fs'))),
|
||||||
|
array('addInstance', array('tagged_fs', new Reference('tagged_fs'))),
|
||||||
|
), $collector->getMethodCalls());
|
||||||
|
|
||||||
|
$this->assertSame(TraceableAdapter::class, $container->findDefinition('fs')->getClass());
|
||||||
|
$this->assertSame(TraceableTagAwareAdapter::class, $container->getDefinition('tagged_fs')->getClass());
|
||||||
|
$this->assertFalse($collector->isPublic(), 'The "data_collector.cache" should be private after processing');
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user