我有一個註銷監聽器,我想在其中設置一條顯示註銷確認消息的Flash消息。Symfony 2 - 在控制器之外設置閃存消息
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.yml配置不壞就註銷了會議;否則,會話將被銷燬,您的閃光燈將永遠不會出現。
logout:
path: /logout
success_handler: logout_listener
invalidate_session: false
我添加了我的services.yml。我如何添加註入服務?我認爲我需要使用參數,但我不確定注入這些參數的語法。 – doremi
這會向您顯示有關注入服務的基本示例,請在此處閱讀更多信息:http://symfony.com/doc/current/book/service_container.html –
我的會話顯然正在被破壞,因此閃存正在被擦除。我認爲實際登出已經完成之前onLogoutSuccess()被調用? – doremi