【发布时间】:2018-04-03 07:24:11
【问题描述】:
我在我的自定义 PHP 项目中使用 Symfony 的依赖注入组件版本 3.4。我的项目在 PHP 5.6 上运行
"symfony/dependency-injection": "^3.4"
我已经定义了我的 services.yaml 文件以包含以下服务定义
logger:
class: Monolog\Logger
arguments: ["application"]
autowire: true
public: true
Monolog\Logger: '@logger'
plugin_context:
class: MyProject\PluginContext
autowire: true
public: true
我可以确认自动加载正在工作并且两个类的实例都存在于定义中,但是 Logger 类没有在 PluginContext 构造函数中自动装配。该类在以下代码中定义
use Monolog\Logger;
class PluginContext
{
private $logger;
function __construct(Logger $logger) {
$this->logger = $logger;
}
}
以下代码运行时,PHP抛出异常
$container->get("plugin_context");
Catchable fatal error: Argument 1 passed to MyProject\PluginContext::__construct() must be an instance of Monolog\Logger, none given
【问题讨论】:
-
缺少
arguments: ["Monolog\Logger"]的plugin_context:?似乎您的构造函数需要记录器依赖项,但未在插件内容的参数中定义 -
@Smaine 下面关于针对 LoggerInterface 的类型提示的回答是正确的。如果您打算使用 autowire,那么您需要对其工作原理有相当深入的了解,这意味着阅读和理解 docs。并学习使用诸如“bin/console debug:container --show-private | grep logger”之类的命令来查看可用的服务和别名。
标签: php symfony dependency-injection autowired