ログアウト確認メッセージを表示するフラッシュメッセージを設定したいログアウトリスナーがあります。
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を生成できるように、ルーターにアクセスするにはどうすればよいですか?
解決策に関する注意
フラッシュを機能させるには、security.ymlconfigがログアウト時にセッションを無効にしないように指示する必要があります。そうしないと、セッションが破棄され、フラッシュが表示されなくなります。
logout:
path: /logout
success_handler: logout_listener
invalidate_session: false