【发布时间】:2014-07-29 10:51:29
【问题描述】:
我的app/config/services.yml:
services:
FooService:
class: path/to/FooService.php
arguments: [..., "@logger"]
我的FooService.php:
class FooService
{
public function __construct(..., $logger) {
// $logger here satisfies \Psr\Log\LoggerInterface
}
...
}
我不明白作为$logger 参数传入的LoggerInterface 实例实际上是从哪里来的。 Symfony 文档说(替换我的示例名称):
在 YAML 中,特殊的
@logger语法告诉容器查找名为logger的服务并将该对象传递给FooService的构造函数。但是,在这种情况下,指定的服务logger必须存在。如果没有,就会抛出异常。
显然logger 服务确实 存在,因为没有抛出异常并且我得到一个对象作为$logger 参数。但它来自哪里?在文档中的所有示例以及我的应用程序中,此语法似乎引用了services.yml 中定义的另一个服务。必须在其他地方定义服务,但文档没有说明在哪里。有什么线索吗?
【问题讨论】:
-
它可以定义在你在内核中注册的包中。那些也可以有自定义 services.yml 文件
-
捆绑包中有一堆由 Symfony 预先定义的服务 (github.com/symfony/symfony/tree/master/src/Symfony/Bundle)。要查看所有已注册的服务,您可以使用
app/console container:debug。
标签: php symfony logging service