【问题标题】:Removing Symfony2 scope widening notice删除 Symfony2 范围扩大通知
【发布时间】:2012-04-19 11:39:55
【问题描述】:

我正在尝试通过尽可能删除对服务容器的引用来加速我的堆栈。在这种情况下,我只需要请求:

email_error_message:
  class: Core\MyBundle\Services\Email\ErrorMessage
        arguments: [ @request, %params ]

但是,这会引发范围扩大的问题。我现在不关心重构代码,我只想通过添加 strict = true 来摆脱警告。但我似乎无法正确使用 YAML 语法:

email_error_message:
  class: Core\MyBundle\Services\Email\ErrorMessage
        arguments:
            - { type: service, id: request, strict: false }
            - %params%

但这不起作用。有什么想法吗?

编辑 我意识到我可以将此服务的范围更改为请求,但在这种情况下这不是一个选项。

【问题讨论】:

    标签: php dependency-injection symfony scope


    【解决方案1】:

    您希望将服务的范围限制在 request 范围内,因为您需要确保传递了正确的 Request 实例 - 例如,如果您在子请求中使用该服务,或者是否通过主请求。将您的服务配置调整为:

    services:
        email_error_message:
            class: Core\MyBundle\Services\Email\ErrorMessage
            scope: request
            arguments: [ @request, %params% ]
    

    更多详情请见the docs

    编辑根据您的问题编辑,您无法更改范围。在这种情况下,您的语法应如下所示:

    services:
        email_error_message:
            class: Core\MyBundle\Services\Email\ErrorMessage
            arguments: [ @request=, %params% ]
    

    带有附加的= 符号。请注意,我在任何地方都没有看到这个引用,它是从 DI 容器的代码中挖掘出来的;-)

    【讨论】:

    • 谢谢,我确实读过,但遗憾的是不能这样做;它将影响我不想改变其范围的许多服务(我会更新我的问题以反映这一点)
    • 请注意 @request= 语法在 Twig 的 globals 配置中不起作用(它正在抛出 ServiceNotFoundException)。我发现向 Twig 的全局变量注入范围更广的服务的唯一方法是在请求侦听器中处理 $this->controller->get('twig')->addGlobal('A', $this->controller->get('B'));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2018-02-20
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多