我想覆盖默认 ExceptionListener (documentation)中的setTargetPath
。但我需要额外的服务才能解决这个问题。
在我看来,只有覆盖服务定义,将其复制到我的服务定义并创建自己的构造函数的方法,但我不喜欢这种方法。
还有其他办法吗?
答案 0 :(得分:1)
至于答案,如果您使用的是form_login类型,则可以将其设置为一个常量路由,以便在登录后进行重定向。 Config
您应该设置这两个键:
always_use_default_target_path: true
default_target_path: /route_name_for_redirect
或者选项B,您使用成功处理程序服务,只需返回RedirectResponse
答案 1 :(得分:1)
我找到了另一种使用编译器传递的方法,需要采取以下步骤:
创建包含以下内容的编译器传递:
class WebCompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$definition = $container->getDefinition('security.exception_listener');
$definition->addMethodCall('yourmethod', [ new Reference('your dependency') ]);
}
}
覆盖异常侦听器类参数:
security.exception_listener.class: AcmeBundle\EventListener\SecurityExceptionListener