2

我有一个与 kernel.request 事件挂钩的事件侦听器。在 onKernel 请求方法中,我正在基于子域进行一些验证。如果此验证失败,我想抛出一些异常,例如 AccessDenied 之类的。

问题是当我抛出异常时,它显示一个空白页面而不是我的自定义错误页面。

如果我检查我的 prod.log 文件,我会得到以下信息:

[2013-06-06 11:08:38] request.ERROR: Exception thrown when handling an exception (Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: This route needs to be accessed with a subdomain) [] []
[2013-06-06 11:16:32] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: "This route needs to be accessed with a subdomain" at (...) line 86 [] [] 

我错过了什么?谢谢您的帮助

4

1 回答 1

3

kernel.request 事件期间不会捕获异常。您可以改为返回响应:

class SubdomainSubscriber implements EventSubscriberInterface
{

    public static function getSubscribedEvents()
    {
        return [
            'kernel.request' => 'onRequest',
        ];
    }

    public function onRequest(GetResponseEvent $event)
    {
        if (!$subdomainValid) {
            $event->setResponse(new Response('Invalid subdomain!', 403));
        }
    }
}

尽管此示例EventSubscriber也适用于侦听器。

于 2016-04-01T10:50:19.343 回答