Symfony 4服务别名

时间:2018-08-06 10:22:24

标签: symfony symfony4

我有捆绑服务

@ sonata.page.twig.extension

它是私人的。

我需要设置为公开。

尝试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

相同错误

2 个答案:

答案 0 :(得分:1)

在此示例中要澄清“ @”的使用:“ @ 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'

答案 1 :(得分:0)

确定找到了解决方法

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

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