如何向ExceptionListener注入额外的服务?

时间:2014-10-14 11:12:50

标签: symfony symfony-2.5 symfony-security

我想覆盖默认 ExceptionListener documentation)中的setTargetPath。但我需要额外的服务才能解决这个问题。

在我看来,只有覆盖服务定义,将其复制到我的服务定义并创建自己的构造函数的方法,但我不喜欢这种方法。

还有其他办法吗?

2 个答案:

答案 0 :(得分:1)

至于答案,如果您使用的是form_login类型,则可以将其设置为一个常量路由,以便在登录后进行重定向。 Config

您应该设置这两个键:

            always_use_default_target_path: true
            default_target_path:            /route_name_for_redirect

或者选项B,您使用成功处理程序服务,只需返回RedirectResponse

答案 1 :(得分:1)

我找到了另一种使用编译器传递的方法,需要采取以下步骤:

  1. 创建自己的类,扩展 ExceptionListener 并为依赖项添加方法
  2. 创建包含以下内容的编译器传递:

    class WebCompilerPass implements CompilerPassInterface
    {
    
        public function process(ContainerBuilder $container)
        {
            $definition = $container->getDefinition('security.exception_listener');
            $definition->addMethodCall('yourmethod', [ new Reference('your dependency') ]);
        }
    }
    
  3. 注册编译器传递
  4. 覆盖异常侦听器类参数:

    security.exception_listener.class: AcmeBundle\EventListener\SecurityExceptionListener