2012-05-03 43 views

回答

25

您可以將容器參數傳遞到您的服務中b Ÿ使用%your_param_name%符號:

services: 
    kernel.listener.locale_listener: 
     class: My\BundleName\Listener\LocaleListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } 
     arguments: [ @router, @service_container, %your_param_name% ] 

將自己打扮成(在這個例子中)在服務的構造方法的第三個參數:

public function __construct($router, $container, $paramValue) 
{ 
    // ... 
} 
+2

這裏有更多文檔嗎?我也有一個Listener作爲服務。在我的config.yml中,我有一些我希望在Listener中訪問的設置,我應該將它們配置爲參數嗎? –

+0

請注意,自Symfony 2.8以來,您必須引用以下參數: 參數:[「@router」,「@service_container」,「%your_param_name%」] – Naroh

-1

解決:我們需要通過@service_container本身作爲參數傳遞給聽衆服務

MyBundleName /資源/ services.yml

services: 
    kernel.listener.locale_listener: 
     class: My\BundleName\Listener\LocaleListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } 
     arguments: [ @service_container ] 

監聽器類:

class LocaleListener 
{ 
    protected $container; 

    public function __construct(\Symfony\Component\DependencyInjection\Container $container) 
    { 
     $this->container = $container; 
    } 
.. 

    public function Myfunction() 
    { 
     $languages = $this->container->getParameter('languages'); 
    } 

} 
+12

在這種情況下,傳遞整個容器是一個壞主意™ 。 –

+0

採取點,謝謝你的建議。 – Amit

+0

@Elnur - 爲什麼傳遞整個容器是一個壞主意? –

相關問題