为什么 Symfony 3.3.13 源代码会生成弃用警告(不在我的代码中)?

Why is Symfony 3.3.13 source generating a deprecation warning (not in my code)?

我在 Symfony 3.3.13 全栈应用程序中收到弃用通知。

Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "Psr\Log\LoggerInterface".

请注意,这是来自 Symfony 的源代码,而不是我的代码。

点击"Show Trace"显示在文件vendor/symfony/monolog-bundle/DependencyInjection/MonologExtension.php.

密码是:

if (method_exists('Symfony\Component\DependencyInjection\Definition', 'addAutowiringType')) {
         $container->getDefinition('monolog.logger')->addAutowiringType('Psr\Log\LoggerInterface');
    }

我怀疑我需要更新我的 composer.json 文件中的 monolog-bundle 版本,但一直无法找到正确的版本。当前设置为“~2.8”。

好的。我终于想到检查 Packagist 以获取最新的 monolog-bundle 版本。

我将 composer.json 文件中的版本从“~2.8”更改为“~3.1”,并进行了作曲家更新 symfony/monolog-bundle。

问题已解决。

这是 symfony 自动装配已更改的通知。 Symfony Autowiring

这只是一个警告,您的 symfony/monolog-bundle 无论如何都会检查自动装配类型是否存在:

if (method_exists('Symfony\Component\DependencyInjection\Definition', 'addAutowiringType')) {

你的 Symfony 版本只是保留了 Symfony\Component\DependencyInjection\DefinitionaddAutowiringType 函数来给你这个警告。

最新版本的 Monolog 包添加了必要的别名 github link

您可以使用 monolog-bundle 的版本 3.1

如果出于任何原因您必须使用任何以前的版本,您将需要在您的服务中添加别名配置

services:
   Psr\Log\LoggerInterface: "@logger"