如何覆盖默认的Psr \ LogLoggerInterface别名

时间:2019-04-14 11:26:31

标签: php symfony symfony-4.2

我尝试为实现此接口的服务创建一个ID为'Psr \ Log \ LoggerInterface'的别名。
但是别名似乎不起作用。

这是我在services.yaml中的配置

services:
    A\Name\Space\LoggerService:
        arguments:
            $arg1: ''
            $arg2: ''

    Psr\Log\LoggerInterface:
        alias: A\Name\Space\LoggerService

这是我尝试在控制器中获取服务的方式:

class SomeController extends AbstractController
{
    public function index(LoggerInterface $logger): Response
    {
        $logger->info('index');
        return $this->render('index.html.twig');
    }
}

我希望获得类A\Name\Space\LoggerService的服务,但是我得到类‌Symfony\Component\HttpKernel\Log\Logger

如果我直接获得该服务,则效果很好:

class SomeController extends AbstractController
{
    public function index(\A\Name\Space\LoggerService $logger): Response
    {
        $logger->info('index');
        return $this->render('index.html.twig');
    }
}

最后,如果我将别名更改为:

logger:
    alias: A\Name\Space\LoggerService

效果很好。但我不想覆盖Symfony记录器服务,仅 别名。

1 个答案:

答案 0 :(得分:1)

如何像这样绑定

services:
    _defaults:
        bind:
            #...
            Psr\Log\LoggerInterface $logger: '@A\Name\Space\LoggerService'

https://symfony.com/doc/current/service_container.html#binding-arguments-by-name-or-type