Ich habe einen Logout-Listener, an dem ich eine Flash-Nachricht mit einer Abmeldebestätigungsmeldung einrichten möchte.Symfony 2 - Einstellen einer Flash-Nachricht außerhalb des Controllers
namespace Acme\MyBundle\Security\Listeners;
use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
class LogoutListener implements LogoutSuccessHandlerInterface
{
private $security;
public function __construct(SecurityContext $security)
{
$this->security = $security;
}
public function onLogoutSuccess(Request $request)
{
$request->get('session')->getFlashBag()->add('notice', 'You have been successfully been logged out.');
$response = new RedirectResponse('login');
return $response;
}
}
Hier ist meine services.yml (wie es dazu gehört):
logout_listener:
class: ACME\MyBundle\Security\Listeners\LogoutListener
arguments: [@security.context]
Dies erzeugt einen Fehler:
Fatal error: Call to a member function getFlashBag() on a non-object
Wie kann ich in diesem eine flashBag Nachricht gesetzt Kontext?
Wie bekomme ich auch Zugriff auf den Router, damit ich die URL generieren kann (über $ this-> router-> generate ('Login')) anstatt eine fest codierte URL zu übergeben?
Auflösung Bemerkung
Um den Blitz zu arbeiten, müssen Sie Ihre security.yml Config nicht ungültig machen die Sitzung beim Abmelden sagen; Andernfalls wird die Sitzung zerstört und Ihr Flash wird nie angezeigt.
ich meine services.yml hinzugefügt. Wie füge ich die Dienste hinzu? Ich nehme an, dass ich Argumente verwenden muss, aber ich bin mir nicht sicher über die Syntax, um diese zu injizieren. – doremi
Dies zeigt Ihnen ein grundlegendes Beispiel zum Injizieren von Diensten, lesen Sie hier mehr: http://symfony.com/doc/current/book/service_container.html –
Meine Sitzung wird anscheinend zerstört, so dass der Flash gelöscht wird. Ich dachte, die eigentliche Abmeldung wurde bereits gemacht, bevor onLogoutSuccess() aufgerufen wird? – doremi