Symfony2 Custom Error Exception Listener - Szablony renderowania lub przekazywanie do kontrolera

Próbuję wypracować najlepszy sposób obsługi niestandardowych stron błędów w Symfony2. Obejmuje to 500 i 404 itd.

Mogę tworzyć własne szablony niestandardowe (error404.html.twig itp.) I wyrenderować je w porządku, problem polega na tym, że aplikacja wymaga podania kilku zmiennych do szablonu bazowego, aby strona pozostała spójna. Użycie wbudowanej procedury obsługi wyjątków powoduje, że wymagane zmienne nie są dostępne.

Pomyślnie skonfigurowałem niestandardowy odbiornik zdarzeń wyjątków i zarejestrowałem go jako usługę:

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);

        }


    }
}

To nie działa, ponieważ: $ container nie jest dostępny, co oznacza, że ​​nie mogę renderować mojej niestandardowej strony.

Tak więc dwa pytania naprawdę, czy jest to właściwy sposób obsługi niestandardowych stron błędów, czy powinienem przekazać odpowiedź kontrolerowi? Jeśli tak, jaki jest najlepszy sposób na to?

Jeśli jest to poprawne, jak mogę udostępnić silnik szablonów w moim Słuchaczu?

questionAnswers(2)

yourAnswerToTheQuestion