8

我有一个监听服务。我想读取其中的一些配置参数。

如何访问侦听器类中的服务容器?

4

2 回答 2

29

您可以使用以下%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)
{
    // ...
}
于 2012-05-03T08:29:52.840 回答
-1

已解决:我们需要将@service_container自身作为参数传递给监听服务

MyBundleName/Resources/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');
    }

}
于 2012-05-03T05:59:43.730 回答