[DI] Warn when a definition relies on a deprecated class in ContainerBuilder::createService()
This commit is contained in:
parent
b6ab750e18
commit
ca69fa340c
@ -841,22 +841,29 @@ class FrameworkExtension extends Extension
|
|||||||
{
|
{
|
||||||
$loader->load('annotations.xml');
|
$loader->load('annotations.xml');
|
||||||
|
|
||||||
if ('file' === $config['cache']) {
|
if ('none' !== $config['cache']) {
|
||||||
$cacheDir = $container->getParameterBag()->resolveValue($config['file_cache_dir']);
|
if ('file' === $config['cache']) {
|
||||||
if (!is_dir($cacheDir) && false === @mkdir($cacheDir, 0777, true) && !is_dir($cacheDir)) {
|
$cacheDir = $container->getParameterBag()->resolveValue($config['file_cache_dir']);
|
||||||
throw new \RuntimeException(sprintf('Could not create cache directory "%s".', $cacheDir));
|
if (!is_dir($cacheDir) && false === @mkdir($cacheDir, 0777, true) && !is_dir($cacheDir)) {
|
||||||
|
throw new \RuntimeException(sprintf('Could not create cache directory "%s".', $cacheDir));
|
||||||
|
}
|
||||||
|
|
||||||
|
$container
|
||||||
|
->getDefinition('annotations.php_file_cache')
|
||||||
|
->replaceArgument(0, $cacheDir)
|
||||||
|
;
|
||||||
|
|
||||||
|
// The annotations.file_cache_reader service is deprecated
|
||||||
|
$container
|
||||||
|
->getDefinition('annotations.file_cache_reader')
|
||||||
|
->replaceArgument(1, $cacheDir)
|
||||||
|
->replaceArgument(2, $config['debug'])
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
$container
|
|
||||||
->getDefinition('annotations.file_cache_reader')
|
|
||||||
->replaceArgument(1, $cacheDir)
|
|
||||||
->replaceArgument(2, $config['debug'])
|
|
||||||
;
|
|
||||||
$container->setAlias('annotation_reader', 'annotations.file_cache_reader');
|
|
||||||
} elseif ('none' !== $config['cache']) {
|
|
||||||
$container
|
$container
|
||||||
->getDefinition('annotations.cached_reader')
|
->getDefinition('annotations.cached_reader')
|
||||||
->replaceArgument(1, new Reference($config['cache']))
|
->replaceArgument(1, new Reference('file' !== $config['cache'] ? $config['cache'] : 'annotations.php_file_cache'))
|
||||||
->replaceArgument(2, $config['debug'])
|
->replaceArgument(2, $config['debug'])
|
||||||
;
|
;
|
||||||
$container->setAlias('annotation_reader', 'annotations.cached_reader');
|
$container->setAlias('annotation_reader', 'annotations.cached_reader');
|
||||||
|
@ -19,7 +19,12 @@
|
|||||||
<argument /><!-- Debug-Flag -->
|
<argument /><!-- Debug-Flag -->
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
<service id="annotations.php_file_cache" class="Doctrine\Common\Cache\PhpFileCache" public="false">
|
||||||
|
<argument /><!-- Cache-Directory -->
|
||||||
|
</service>
|
||||||
|
|
||||||
<service id="annotations.file_cache_reader" class="%annotations.file_cache_reader.class%" public="false">
|
<service id="annotations.file_cache_reader" class="%annotations.file_cache_reader.class%" public="false">
|
||||||
|
<deprecated>The "%service_id%" service is deprecated since 2.8 and will be removed in 3.0.</deprecated>
|
||||||
<argument type="service" id="annotations.reader" />
|
<argument type="service" id="annotations.reader" />
|
||||||
<argument /><!-- Cache-Directory -->
|
<argument /><!-- Cache-Directory -->
|
||||||
<argument /><!-- Debug Flag -->
|
<argument /><!-- Debug Flag -->
|
||||||
|
@ -320,8 +320,9 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
{
|
{
|
||||||
$container = $this->createContainerFromFile('full');
|
$container = $this->createContainerFromFile('full');
|
||||||
|
|
||||||
$this->assertEquals($container->getParameter('kernel.cache_dir').'/annotations', $container->getDefinition('annotations.file_cache_reader')->getArgument(1));
|
$this->assertEquals($container->getParameter('kernel.cache_dir').'/annotations', $container->getDefinition('annotations.php_file_cache')->getArgument(0));
|
||||||
$this->assertInstanceOf('Doctrine\Common\Annotations\FileCacheReader', $container->get('annotation_reader'));
|
$this->assertSame('annotations.cached_reader', (string) $container->getAlias('annotation_reader'));
|
||||||
|
$this->assertSame('annotations.php_file_cache', (string) $container->getDefinition('annotations.cached_reader')->getArgument(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testFileLinkFormat()
|
public function testFileLinkFormat()
|
||||||
|
@ -899,6 +899,14 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
$service = call_user_func_array($factory, $arguments);
|
$service = call_user_func_array($factory, $arguments);
|
||||||
|
|
||||||
|
if (!$definition->isDeprecated() && is_array($factory) && is_string($factory[0])) {
|
||||||
|
$r = new \ReflectionClass($factory[0]);
|
||||||
|
|
||||||
|
if (0 < strpos($r->getDocComment(), "\n * @deprecated ")) {
|
||||||
|
@trigger_error(sprintf('The "%s" service relies on the deprecated "%s" factory class. It should either be deprecated or its factory upgraded.', $id, $r->name), E_USER_DEPRECATED);
|
||||||
|
}
|
||||||
|
}
|
||||||
} elseif (null !== $definition->getFactoryMethod(false)) {
|
} elseif (null !== $definition->getFactoryMethod(false)) {
|
||||||
if (null !== $definition->getFactoryClass(false)) {
|
if (null !== $definition->getFactoryClass(false)) {
|
||||||
$factory = $parameterBag->resolveValue($definition->getFactoryClass(false));
|
$factory = $parameterBag->resolveValue($definition->getFactoryClass(false));
|
||||||
@ -913,6 +921,10 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
|
|||||||
$r = new \ReflectionClass($parameterBag->resolveValue($definition->getClass()));
|
$r = new \ReflectionClass($parameterBag->resolveValue($definition->getClass()));
|
||||||
|
|
||||||
$service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs($arguments);
|
$service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs($arguments);
|
||||||
|
|
||||||
|
if (!$definition->isDeprecated() && 0 < strpos($r->getDocComment(), "\n * @deprecated ")) {
|
||||||
|
@trigger_error(sprintf('The "%s" service relies on the deprecated "%s" class. It should either be deprecated or its implementation upgraded.', $id, $r->name), E_USER_DEPRECATED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($tryProxy || !$definition->isLazy()) {
|
if ($tryProxy || !$definition->isLazy()) {
|
||||||
|
Reference in New Issue
Block a user