Symfony 4 服务别名

Symfony 4 service alias

我有捆绑服务

@sonata.page.twig.extension

这是私人的。

我需要设置为 public。

尝试 1。

  Sonata\PageBundle\Twig\Extension\PageExtension:
    alias: "@sonata.page.twig.extension"
    public: true

得到

 InvalidArgumentException
Unable to replace alias "Sonata\PageBundle\Twig\Extension\PageExtension" with actual definition "@sonata.page.twig.extension".

尝试 2

mea.sonata.page.twig.extension:
    alias: "@sonata.page.twig.extension"
    public: true

同样的错误

确定找到解决方案

  Sonata\PageBundle\Twig\Extension\PageExtension:
    alias: 'sonata.page.twig.extension'
    public: true

为什么有时候@sonata.page.twig.extension 有时候sonata.page.twig.extension

在此示例中阐明“@”的用法:“@sonata.page.twig.extension”

没有它,您就是在告诉容器传递字符串 sonata.page.twig.extension.
有了它,你告诉容器传递服务 sonata.page.twig.extension.

从文档中,查看代码中的以下注释:https://symfony.com/doc/current/service_container.html

 # explicitly configure the service
    App\Service\MessageGenerator:
        arguments:
            # the '@' symbol is important: that's what tells the container
            # you want to pass the *service* whose id is 'monolog.logger.request',
            # and not just the *string* 'monolog.logger.request'
            $logger: '@monolog.logger.request'