Symfony错误页面仅在自定义路径内

时间:2017-08-16 07:36:21

标签: php symfony bundle symfony-3.3

我目前正在开发一个可重复使用的软件包,其中我正在制作其他路由(在routing.yml内部设置+使用Routing Loader机制加载)。全部以ExceptionListener开头(是的,这是一个管理包)。我目前在我的网络应用程序中有自己的404页面(主要的)。我试图说,如果用户在管理包错误内,他将看到另一个错误页面。

我使用自己的自定义 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 }

import ReactNativeComponentTree from 'react-native';

现在它工作正常,显示所有自定义捆绑包的错误页面。但它们随处可见,即使在主应用程序路径失败时也是如此。

如何分隔何时显示应用程序错误页面以及何时显示自定义捆绑包?

1 个答案:

答案 0 :(得分:2)

如果用户尝试访问以/admin开头但不存在的路线,我会假设你想要一个不同的404页面。您可以通过以下方法在onKernelException()方法中执行此操作:

$request = $event->getRequest();

// check if request starts with /admin
if (substr($request->getRequestUri(), 0, strlen('/admin')) === '/admin') {
    // load admin 404 template
    $response->setContent(/* ... */);
} else {
    // load site 404 template
    $response->setContent(/* ... */);
}

$event->setResponse($response);

我也注意到你没有明确检查404页面,你可能应该通过以下方式进行检查:

if ($exception instanceof NotFoundHttpException) {
    /* set your template response here */
}