Symfony2 Custom Error Exception Listener - Rendern von Vorlagen oder Übergabe an einen Controller

Ich versuche herauszufinden, wie ich mit benutzerdefinierten Fehlerseiten in Symfony2 am besten umgehen kann. Dazu gehören 500 und 404 usw.

Ich kann meine eigenen benutzerdefinierten Vorlagen erstellen (error404.html.twig usw.) und diese gut rendern. Das Problem ist, dass die App einige Variablen in die Basisvorlage übergibt, damit die Seite konsistent bleibt. Die Verwendung des integrierten Ausnahmehandlers führt dazu, dass erforderliche Variablen nicht verfügbar sind.

Ich habe einen benutzerdefinierten Exception Event Listener erfolgreich eingerichtet und als Dienst registriert:

namespace MyCo\MyBundle\Listener;

use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Bundle\TwigBundle\TwigEngine;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;



class MyErrorExceptionListener
{

    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        // We get the exception object from the received event
        $exception = $event->getException();

        if($exception->getStatusCode() == 404)
        {

            //$engine = $this->container->get('templating');
            //$content = $engine->render('MyBundle:Default:error404.html.twig');    
            //return $response = new Response($content);

            /* Also Tried */
            //$templating = $this->container->get('templating');    
            //return $this->render('MyBundle:Default:index.html.twig');



            $response = new Response($templating->render('MyBundle:Exception:error404.html.twig', array(
                    'exception' => $exception
            )));

            $event->setResponse($response);

        }


    }
}

Dies funktioniert nicht, da: $ container nicht verfügbar ist, was bedeutet, dass ich meine benutzerdefinierte Seite nicht rendern kann.

Also zwei Fragen, ist dies die richtige Art, mit benutzerdefinierten Fehlerseiten umzugehen, oder sollte ich die Antwort an einen Controller weiterleiten? Wenn ja, wie geht das am besten?

Wenn dies korrekt ist, wie kann ich die Vorlagen-Engine in meinem Listener verfügbar machen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage