Symfony2-Umleitung für Event-Listener?

Lesezeit: 2 Minuten

Benutzer-Avatar
Jona Katz

Ich habe ein Kernel-Ereignis-Listener-Setup (kernel.controller), um den Benutzer umzuleiten, wenn er nicht angemeldet ist. Der Ereignis-Listener wird erfolgreich aufgerufen, aber ich habe Probleme, herauszufinden, wie ich umleiten soll. Hier ist, was ich habe:

$cont = $event->getController('testpost');
$event->setResponse($cont);

Was mir den Fehler gibt:

Fatal error: Call to undefined method Symfony\Component\HttpKernel\Event\FilterControllerEvent::setResponse() 

Wenn Sie von weiterleiten möchten FilterControllerEvent du solltest diesen verwenden:

public function onKernelController(FilterControllerEvent $event)
{
    // do something
    $event->setController(function() use ($redirectUrl) {
        return new RedirectResponse($redirectUrl);
    });
}

  • Das war genau das was ich gesucht habe, danke! Ich musste unter bestimmten Bedingungen umleiten, unter anderem, wenn ein bestimmter Controller geroutet wurde. Das onKernelRequest-Ereignis wurde aufgerufen, bevor es den Controller tatsächlich weitergeleitet hat, sodass ich die Logik dort nicht platzieren konnte.

    – Bryson

    25. Juli 2013 um 16:47 Uhr

  • das hat mir gerade das Leben gerettet

    – Geschwärztes Profil

    23. Dezember 2013 um 20:10 Uhr

  • Dies wirft eine “Warnung: Kopfzeile darf nicht mehr als eine einzelne Kopfzeile enthalten, neue Zeile erkannt in …” für mich

    – Julius F

    25. Februar 2014 um 15:17 Uhr

  • @JuliusF Bist du sicher, dass vor der Umleitung ein Fehler ausgegeben wird? Hast du dir Profiler angeschaut?

    – NHG

    25. Februar 2014 um 15:25 Uhr

  • Super. Das ist ziemlich toll. Ich danke dir sehr!

    – Darragh Enright

    23. September 2014 um 13:34 Uhr

Benutzer-Avatar
Elnur Abdurrakhimov

Sie können keine Antwort auf a festlegen FilterControllerEvent Objekt. Sie müssen auf die hören kernel.request Ereignis, weil es GetResponseEvent Objekt hat die setResponse() Methode:

$route="route_name";

if ($route === $event->getRequest()->get('_route')) {
    return;
}

$url = $this->router->generate($route);
$response = new RedirectResponse($url);
$event->setResponse($response);

  • Oh, interessant. Ich bekomme immer noch die call to undefined method setResponsegibt es eine Klasse/Datei, die ich einschließen sollte?

    – Jona Katz

    16. Oktober 2012 um 14:47 Uhr

  • Haben Sie den Parametertyp auf geändert GetResponseEvent? Und hörst du wirklich zu kernel.request? Bitte überprüfen Sie es noch einmal.

    – Elnur Abdurrakhimov

    16. Oktober 2012 um 14:51 Uhr

  • Ok, es stellte sich heraus, dass ich auf kernal.controller war, also habe ich es auf kernal.request umgestellt und es leitet mit Fehler um ErrorException: Catchable Fatal Error: Argument 1 passed to... must be an instance of Symfony\Component\HttpKernel\Event\FilterControllerEvent, instance of Symfony\Component\HttpKernel\Event\GetResponseEvent

    – Jona Katz

    16. Oktober 2012 um 14:57 Uhr

  • Wo kommt die $this->router komme aus?

    – Lukas

    6. April 2014 um 0:08 Uhr

  • Der Router kann wie in dieser Antwort gezeigt in den Listener eingefügt werden

    – NDM

    27. November 2014 um 11:29 Uhr

Mehr oder weniger klarer Weg, um auf das Ereignis „kernel.controller“ umzuleiten

public function onKernelController(FilterControllerEvent $event)
{
    /* @var $controller \Symfony\Bundle\FrameworkBundle\Controller\Controller */
    $controller = $event->getController()[0]; // PHP 5.4 or $controller = $controller[0];

    throw new HttpException(307, null, null, array('Location' => $controller->generateUrl('homepage')));
}

Das ist kein Weg, mein Freund. Sie sollten eine Standard-Symfony-Sicherheit verwenden, um dies für Sie abzudecken …

1206280cookie-checkSymfony2-Umleitung für Event-Listener?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy