从 FilterControllerEvent 监听器重定向到另一个 Symfony 路由

nbr*_*ink 4 php redirect listener symfony

我正在尝试设置一个 kernal.controller 监听器,以便在函数返回 true 时重定向到另一个路由。我有可用的路线,但无法使用该路线设置控制器$event->setController()

我收到以下错误:

FilterControllerEvent.php 第 59 行中的 FatalThrowableError:类型错误:传递给 Symfony\Component\HttpKernel\Event\FilterControllerEvent::setController() 的参数 1 必须可调用,给出字符串

有人对我如何完成这个有建议吗?

class BlockListener
{
    public function onKernelController(FilterControllerEvent $event)
    {
        $block = $this->blockService->checkForBlock($user->getId());

        if ($block instanceof Block) {
            // $block-getRoute() is a standard Symfony route string. It doesn't work!
            $event->setController($block->getRoute());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

nbr*_*ink 6

我们可以通过使用 Lambda 函数来使其工作。谢谢您的帮助!

    if ($block instanceof Block) {
        $redirectUrl = $this->router->generate($block->getRoute());
        $event->setController(function() use ($redirectUrl) {
            return new RedirectResponse($redirectUrl);
        });
    };
Run Code Online (Sandbox Code Playgroud)