Symfony2 d'Erreur Personnalisé Exception de l'écoute, des modèles de Rendu ou de passer à un contrôleur

Je suis en train de travailler sur la meilleure façon de gérer des pages d'erreur personnalisées dans Symfony2.Cela comprend 500 et 404, etc....

Je peux créer mes propres modèles personnalisés (error404.html.brindille, etc) et de rendre ces bien, la question est , l'application nécessite un peu de variables passer dans le modèle de base de la page pour rester cohérent. En utilisant le construit dans le gestionnaire d'exception résultats dans des variables n'étant pas disponibles.

J'ai réussi à configurer une Exception personnalisée Écouteur d'Événement, et enregistré en tant que service:

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

        }


    }
}

Cela ne fonctionne pas , comme :$container n'est pas disponible , ce qui signifie que je ne peut pas rendre ma page personnalisée.

Donc deux questions vraiment , est-ce la bonne façon de gérer des pages d'erreur personnalisées, ou devrais-je passer la réponse à un contrôleur? Si oui , quel est le meilleur moyen de le faire?

Si cela est correct , comment puis-je faire le moteur de template disponible dans mon Écouteur ?

InformationsquelleAutor BobFlemming | 2012-11-06