У меня есть прослушиватель Logout, где я хотел бы установить флеш-сообщение с сообщением о выходе из системы.
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;
}
}
Вот мои services.yml(как это относится к этому):
logout_listener:
class: ACME\MyBundle\Security\Listeners\LogoutListener
arguments: [@security.context]
Это вызывает ошибку:
Fatal error: Call to a member function getFlashBag() on a non-object
Как установить сообщение flashBag в этом контексте?
Также, как получить доступ к маршрутизатору, чтобы я мог генерировать URL-адрес (через $this- > router- > generate ('login')) вместо передачи в жестко запрограммированном URL-адресе?
Примечание по безопасности
Чтобы заставить flash работать, вы должны сообщить, что ваша версия security.yml не отменяет сеанс при выходе из системы; в противном случае сеанс будет уничтожен, и ваша вспышка никогда не появится.
logout:
path: /logout
success_handler: logout_listener
invalidate_session: false