1

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

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

有没有其他方法可以做到这一点?

4

2 回答 2

1

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

您应该设置这两个键:

            always_use_default_target_path: true
            default_target_path:            /route_name_for_redirect

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

于 2014-10-14T12:44:04.763 回答
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
    
于 2014-10-14T13:42:39.747 回答