Symfony2 - Manipulieren von request/response-aus der Kernel-Ausnahme-Hörer
Baue ich eine Administrations-panel für eine website und ich möchte die Ansicht ändern, die aufgerufen wird, wenn ein 404-Ausnahme tritt auf, aber nur für die admin-Anwendung. (path: /admin/*)
Habe ich bereits übertrieb die error404.html.twig
anzeigen (bei app/Resources/TwigBundle/views/Exception/
) für die website.
Dachte ich an den kernel.Ausnahme-Ereignis-listener, aber jetzt bin ich stecken mit zwei Dingen:
-
Laden ein Fehler nur anzeigen, wenn die Strecke beginnt mit dem Präfix:
/admin/
$route = $event->getRequest->get('_route')->render() //returns NULL
-
Aufruf der
$event->container->get('templating')->render()
Funktion.
Ich am Ende mit einer unendlichen Schleife (leere Seite) als das Skript fehlschlägt.
Nur Dinge, die ich habe, arbeiten sind:
-
Abrufen die Ausnahme-code:
$exception = $event->getException(); $code = $exception->getCode();
-
Erstellen einer neuen Antwort:
$response = new Response(); $event->setResponse($response);
Irgendwelche Vorschläge, wie dies zu erreichen?
[BEARBEITEN]
Klasse:
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/
*/
}
}
Und der Dienstleistungen.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 }
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie versuchen, diese:
$Template-Variablen können übergeben werden services.xml:
ErrorException: Catchable Fatal Error: Argument 1 passed to Cmt\AdminBundle\EventListener\AdminActionListener::__construct() must be an instance of Symfony\Bundle\TwigBundle\TwigEngine
Missing argument 2 for Cmt\AdminBundle\EventListener\AdminActionListener::__construct()
ich habe auch versucht mit FrameworkExtension aber es funktioniert nicht. Plus, wird der Befehlapp/console container:debug
gibt diese:templating container -> Symfony\Bundle\TwigBundle\TwigEngine
Aus irgendeinem Grund, das funktionierte:
Das ist im Grunde was ich Tat, war früher mit eine andere syntax...
@dmirkitanov Trotzdem, vielen Dank für deine Hilfe !