Ho un listener di disconnessione in cui desidero impostare un messaggio flash che mostri un messaggio di conferma di logout.Symfony 2 - Impostazione di un messaggio flash all'esterno del controller
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;
}
}
Ecco il mio services.yml (per quello che attiene a questo):
logout_listener:
class: ACME\MyBundle\Security\Listeners\LogoutListener
arguments: [@security.context]
Questo sta generando un errore:
Fatal error: Call to a member function getFlashBag() on a non-object
Come faccio a impostare un messaggio in questo flashBag contesto?
Inoltre, come accedere al router in modo da poter generare l'url (tramite $ this-> router-> generate ('login')) invece di passare in un URL hardcoded?
Risoluzione Nota
Per ottenere il flash a lavorare, è necessario informare il config security.yml non invalida la sessione al logout; in caso contrario, la sessione verrà distrutta e il tuo flash non verrà mai visualizzato.
logout:
path: /logout
success_handler: logout_listener
invalidate_session: false
ho aggiunto il mio services.yml. Come aggiungo iniettare i servizi? Presumo che ho bisogno di usare argomenti, ma non sono sicuro della sintassi per iniettarli. – doremi
Questo ti mostra un esempio di base riguardo l'iniezione di servizi, leggi di più qui: http://symfony.com/doc/current/book/service_container.html –
A quanto pare la mia sessione viene distrutta e il flash viene cancellato. Pensavo che l'attuale disconnessione fosse già stata effettuata prima che onLogoutSuccess() venisse chiamato? – doremi