2012-04-19 65 views
1

我试图通过删除对服务容器的引用尽可能加速我的堆栈。在这种情况下,我只需要请求:删除Symfony2范围扩大通知

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% 

虽然这不工作。有任何想法吗?

编辑 我知道我可以改变这个服务的范围来请求,但在这种情况下,这不是一个选项。

回答

4

您希望将服务范围限制为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容器的代码;-)

+0

谢谢,我没有读过,但不能不幸地做到这一点;它会影响到很多服务范围内我不想改变的服务(我会更新我的问题以反映这一点) – Mathew 2012-04-19 15:43:45

+0

@MatW好的 - 我已经更新了我的答案。 – richsage 2012-04-19 16:05:15

+0

请注意'@ request ='语法在Twig的'globals'配置中不起作用(它引发'ServiceNotFoundException')。只有这样,我发现将更广泛的服务注入到Twig的全局变量中:$ this-> controller-> get('twig') - > addGlobal('A',$ this-> controller-> get('B')) ;'在请求监听器中处理! – Wirone 2014-10-10 23:10:18