Symfony:事件订阅者。当路由要求用户必须经过身份验证时触发 404 页面(取决于 .env var)
Posted
技术标签:
【中文标题】Symfony:事件订阅者。当路由要求用户必须经过身份验证时触发 404 页面(取决于 .env var)【英文标题】:Symfony : EventSubscriber. trigger a 404 page when a route require user must be authenticated (depending of the .env var) 【发布时间】:2021-10-27 23:27:33 【问题描述】:在我的项目中,我创建了一些控制器和一些路由。
我将这个条件“@IsGranted("IS_AUTHENTICATED_FULLY")
”添加到一些控制器和一些特定的路由中:
根据 env 变量,我想禁用需要身份验证的路由(禁用 = 自动重定向到 404 页面)。我的问题:
从 EventSubscriber 中,我如何检查当前路由是否需要经过身份验证的用户?
【问题讨论】:
请不要将代码添加为图片。 【参考方案1】:您可以使用kernel.exception
event 来获取 Symfony 在这种情况下会自动抛出的 403 / Forbidden 异常的通知。
在事件处理程序中,您可以覆盖响应并将其替换为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 并实现自定义控制器。在配置的控制器操作中,您还可以返回 RedirectResponse
。
# config/packages/framework.yaml
framework:
error_controller: App\Controller\ErrorController::show
【讨论】:
以上是关于Symfony:事件订阅者。当路由要求用户必须经过身份验证时触发 404 页面(取决于 .env var)的主要内容,如果未能解决你的问题,请参考以下文章
如何在事件订阅者中访问Symfony 3.3中的登录用户,而不会丢失Web分析器
Symfony 3 - 无法将 token_storage 传递给订阅者