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:
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
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 …
12062800cookie-checkSymfony2-Umleitung für Event-Listener?yes