2012-04-19 64 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