2012-05-03 9 views

Respuesta

25

Puede pasar los parámetros del contenedor a su servicio b y utilizando el %your_param_name% notación:

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% ] 

que presentarse como (en este ejemplo) la tercera argumento en el método constructor de su servicio:

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

¿Hay un poco más de documentación sobre esto? También tengo un oyente como servicio. En mi config.yml tengo algunas configuraciones a las que deseo acceder en el Listener, ¿debo configurarlas como argumentos? –

+0

Tenga en cuenta que desde Symfony 2.8 tiene que citar esos argumentos: argumentos: ["@router", "@service_container", "% your_param_name%"] – Naroh

-1

resolvió: Tenemos que pasar el @service_container a sí mismo como un argumento al servicio de escucha

MyBundleName/Recursos/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 ] 

Listener Clase:

class LocaleListener 
{ 
    protected $container; 

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

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

} 
+12

pasar todo el recipiente en este caso es una mala idea ™ . –

+0

Punto tomado, gracias por sugerir. – Amit

+0

@Elnur - ¿Por qué está pasando todo el contenedor una mala idea? –

Cuestiones relacionadas