Mam wylogowanie Odbiornika, w którym chciałbym ustawić wiadomość flash pokazującą komunikat potwierdzenia wylogowania.Symfony 2 - Ustawianie komunikatu Flash poza kontrolerem
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;
}
}
Oto moja services.yml (jak to odnosi się do tego):
logout_listener:
class: ACME\MyBundle\Security\Listeners\LogoutListener
arguments: [@security.context]
ten generuje błąd:
Fatal error: Call to a member function getFlashBag() on a non-object
Jak ustawić wiadomość flashBag w ten kontekst?
Co więcej, jak uzyskać dostęp do routera, aby wygenerować adres URL (za pośrednictwem $ this-> router-> generate ("login")) zamiast podawać zakodowany adres URL?
Rozdzielczość Uwaga
Aby dostać się do pracy lampy błyskowej, należy poinformować o tym security.yml config nie unieważnić sesję na wylogowania; w przeciwnym razie sesja zostanie zniszczona, a Twoja lampa błyskowa nigdy się nie pojawi.
logout:
path: /logout
success_handler: logout_listener
invalidate_session: false
dodałam mój services.yml. Jak dodać wstrzyknąć usługi? Zakładam, że potrzebuję użyć argumentów, ale nie jestem pewien składni, aby je wprowadzić. – doremi
To pokazuje podstawowy przykład na temat wstrzykiwania usług, przeczytaj więcej tutaj: http://symfony.com/doc/current/book/service_container.html –
Moja sesja najwyraźniej ulega zniszczeniu, więc flashowanie jest wymazywane. Myślałem, że faktyczne wylogowanie zostało już wykonane przed wywołaniem metody onLogoutSuccess()? – doremi