Symfony2 - Manipuler demande/réponse de la part du Noyau Exception Auditeur
Je suis en construction d'un panneau d'administration pour un site web et je voudrais changer la vue appelée lorsqu'une erreur 404 exception se produit mais seulement pour l'application de l'administrateur. (path: /admin/*)
J'ai déjà abusé du error404.html.twig
vue (à app/Resources/TwigBundle/views/Exception/
) pour le site web.
J'ai pensé que le noyau.exception écouteur d'événement, mais maintenant je suis coincé avec deux choses:
-
Chargement d'une autre erreur vue que lorsque la route commence par le préfixe:
/admin/
$route = $event->getRequest->get('_route')->render() //returns NULL
-
L'appel de la
$event->container->get('templating')->render()
fonction.
Je me retrouve avec une boucle infinie (page vierge) que le script échoue.
Les seules choses que j'ai obtenu de travail sont:
-
Récupérer le code d'exception:
$exception = $event->getException(); $code = $exception->getCode();
-
La création d'une nouvelle réponse:
$response = new Response(); $event->setResponse($response);
Des suggestions sur la façon pour y parvenir?
[MODIFIER]
La classe:
namespace Cmt\AdminBundle\EventListener;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Bundle\TwigBundle\TwigEngine;
class AdminActionListener
{
/**
* @var ContainerInterface
*/
protected $container;
/**
* @var TwigEngine
*/
protected $templating;
/**
* @param ContainerInterface $container
*/
public function __construct(ContainerInterface $container, TwigEngine $templating){
//assign value(s)
$this->container = $container;
$this->templating = $templating;
}
/**
*
* @param GetResponseForExceptionEvent $event
*/
public function onKernelException(GetResponseForExceptionEvent $event)
{
//get exception
$exception = $event->getException();
//get path
$path = $event->getRequest()->getPathInfo();
/*
* Redirect response to new 404 error view only
* on path prefix /admin/
*/
}
}
Et les services.yml:
services:
cmt_admin.exception.action_listener:
class: Cmt\AdminBundle\EventListener\AdminActionListener
arguments: [@service_container] [@templating]
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
OriginalL'auteur LBridge | 2011-09-19
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer celui-ci:
$variable de template peut être passé dans services.xml:
ErrorException: Catchable Fatal Error: Argument 1 passed to Cmt\AdminBundle\EventListener\AdminActionListener::__construct() must be an instance of Symfony\Bundle\TwigBundle\TwigEngine
Avez-vous ajouté <argument type="service" id="templates" /> pour le service comme il le montre ci-dessus?
Oui, je l'ai fait. Je ne comprends vraiment pas ce qu'est la question...
Hmm. Ce service ("template") est définie dans vendor/symfony/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php . Ainsi, si vous avez dépassées Symfony2 installation, ou désactivé Twig, d'une certaine façon.. qu'est-Ce exact de la version de Symfony utilisez-vous? Et pourriez-vous vérifier le fichier que j'ai mentionné?
Vous pouvez également essayer de supprimer explicite vérification de type, j'.e: "public function __construct($template)"
OriginalL'auteur dmirkitanov
Pour une raison quelconque, cela a fonctionné:
Qui est essentiellement ce que je faisais auparavant avec une syntaxe différente...
@dmirkitanov de toute façon, merci pour votre aide !
OriginalL'auteur LBridge