Symfony2异常事件侦听器运行一些控制器操作

Symfony2异常事件侦听器运行一些控制器操作,symfony,Symfony,我需要做两件事中的一件(按优先顺序,但只需要其中一件) 所有这些都是在作为异常事件侦听器()运行的函数中完成的 在普通的控制器中,下面两种方法都非常简单,但在事件侦听器函数中,我看不到这一点 (1) 以正常方式运行控制器,并以正常方式输出,就像已执行该路由一样: e.g. $event->runController('controllerName'); (2) 使用与普通控制器中相同的语法将模板渲染为普通: return $this->render('Bundle:Default:

我需要做两件事中的一件(按优先顺序,但只需要其中一件)

所有这些都是在作为异常事件侦听器()运行的函数中完成的

在普通的控制器中,下面两种方法都非常简单,但在事件侦听器函数中,我看不到这一点

(1) 以正常方式运行控制器,并以正常方式输出,就像已执行该路由一样:

e.g. $event->runController('controllerName');
(2) 使用与普通控制器中相同的语法将模板渲染为普通:

return $this->render('Bundle:Default:feedback.html.twig', array([template vars]));

symfony\Component\HttpKernel\EventListener\ExceptionListener
中查看symfony的默认异常侦听器

(1) 运行控制器可以通过以下方式实现: (2) 在异常侦听器中呈现模板 您只需将模板(引擎)传递给service.yml中的侦听器

    services:
      foobar.exception_listener_service:
        class: %foobar.exception_listener_service.class%
        arguments:
          container: "@service_container"
        tags:
          - { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: 255 }
在侦听器中,您可以按如下所示呈现模板

    $templating = $this->container->get('templating');
    $response = new Response($templating->render('foobar:Exception:error404.html.twig', array('exception' => $exception)));
    $event->setResponse($response);

symfony\Component\HttpKernel\EventListener\ExceptionListener
中查看symfony的默认异常侦听器

(1) 运行控制器可以通过以下方式实现: (2) 在异常侦听器中呈现模板 您只需将模板(引擎)传递给service.yml中的侦听器

    services:
      foobar.exception_listener_service:
        class: %foobar.exception_listener_service.class%
        arguments:
          container: "@service_container"
        tags:
          - { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: 255 }
在侦听器中,您可以按如下所示呈现模板

    $templating = $this->container->get('templating');
    $response = new Response($templating->render('foobar:Exception:error404.html.twig', array('exception' => $exception)));
    $event->setResponse($response);