我目前正在开发一个可重用的bundle,其中我正在制作其他路由(在Routing.yml +中加载了Routing Loader机制)。所有从/admin
开始(是的,这是一个管理包)。我目前在我的web应用程序(主要的)中有我自己的404页面。我试图让如果用户在管理包错误中,他会看到另一个错误页面。Symfony错误页面只在自定义路由中
我用我自己定制ExceptionListener
使其如下
class ExceptionListener
{
//...
public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
$response = new Response();
//...
$response->setContent($this->templating->render($templateName, [
'statusCode' => $response->getStatusCode(),
'page' => $page
]));
$event->setResponse($response);
}
}
,并在包的services.yml
(自定义管理包在里面!):
admin.exception_listener:
class: ....\EventListener\ExceptionListener
calls:
- ["setTemplating", ["@templating"]]
- ["setKernel", ["@kernel"]]
tags:
- { name: kernel.event_listener, event: kernel.exception }
现在工作得很好,所有的定制捆绑的显示错误页面。但它们到处都显示出来,即使在主应用程序路由失败的情况下。
如何区分何时显示应用程序错误页面以及何时显示自定义捆绑包?
你只能有1个例外处理程序afaik,但你可以听到来自你的管理包的事件,如下所述:http://symfony.com/doc/current/event_dispatcher.html – DarkMukke
@DarkMukke,你能告诉我如何使Exception Subscriber仅订阅发生在一个Web应用程序包中的异常?我不知道下面的其他答案已经消失:0 – user7808407
我在自定义包中创建了Exception Subscriber,但它的行为与我的帖子中的Exception Listener完全一样。我无法让它订阅/只收听一个包的路由错误。 :( – user7808407