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 }
InformationsquelleAutor LBridge | 2011-09-19
Schreibe einen Kommentar