Symfony:事件订阅者。当路由要求用户必须经过身份验证时触发 404 页面(取决于 .env var)

Symfony : EventSubscriber. trigger a 404 page when a route require user must be authenticated (depending of the .env var)

在我的项目中,我创建了一些控制器和一些路由。

我向某些控制器和某些特定路由添加了这种条件“@IsGranted("IS_AUTHENTICATED_FULLY")”,如下所示:

根据环境变量,我想禁用需要验证的路由(禁用 = 自动重定向到 404 页面)。我的问题:

从 EventSubscriber,我如何检查当前路由是否需要认证用户?

您可以使用 kernel.exception event 获得 403 / Forbidden 异常的通知,Symfony 在这种情况下会自动抛出该异常。 在事件处理程序中,您可以覆盖响应并将其替换为 RedirectResponse:

<?php

namespace App;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class ControllerListener implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::EXCEPTION => 'onException',
        ];
    }

    public function onException(ExceptionEvent $event)
    {
        // implement custom logic and set your response, eg.:
        // $event->setResponse(new RedirectResponse(...))
    }
}

另一种方法是覆盖 framework.error_controller configuration 并实现自定义控制器。在配置的控制器操作中,您还可以 return a RedirectResponse.

# config/packages/framework.yaml
framework:
    error_controller: App\Controller\ErrorController::show