如何向ExceptionListener注入附加服务



我想覆盖默认ExceptionListener(文档)中的setTargetPath。但我需要额外的服务来处理这个问题。

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

还有别的办法吗?

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

你应该设置这2个键:

            always_use_default_target_path: true
            default_target_path:            /route_name_for_redirect

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

我发现了另一种使用编译器传递的方法,以下步骤是必要的:

  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: AcmeBundleEventListenerSecurityExceptionListener
    

相关内容

  • 没有找到相关文章

最新更新