Tengo un servicio de escucha. Quiero leer algunos parámetros de configuración dentro de él.Symfony2: ¿Cómo obtener un parámetro de configuración dentro de un oyente?
¿Cómo puedo acceder al contenedor de servicios dentro de la clase de escucha?
Tengo un servicio de escucha. Quiero leer algunos parámetros de configuración dentro de él.Symfony2: ¿Cómo obtener un parámetro de configuración dentro de un oyente?
¿Cómo puedo acceder al contenedor de servicios dentro de la clase de escucha?
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)
{
// ...
}
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');
}
}
pasar todo el recipiente en este caso es una mala idea ™ . –
Punto tomado, gracias por sugerir. – Amit
@Elnur - ¿Por qué está pasando todo el contenedor una mala idea? –
¿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? –
Tenga en cuenta que desde Symfony 2.8 tiene que citar esos argumentos: argumentos: ["@router", "@service_container", "% your_param_name%"] – Naroh