我目前正在開發一個可重用的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