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 ?
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter dans le vôtre Auditeur
Comment faites-vous pour enregistrer vos auditeurs?
Vous devez vous inscrire à l'Auditeur comme Service
Comme ça
Le meilleur moyen est de ne pas utiliser service_container.
Le meilleur moyen est de vous inscrire uniquement les services nécessaires.
Comme ça
Le chemin que j'ai fait pour résoudre des problème est: je ne sais pas si cela peut vous aider.