我的目标是从能够正确执行基本注销机制的控制器执行注销。 在谷歌搜索和堆栈溢出一些类似的问题后,我试图实现类LogoutListener的扩展,如答案中所建议How to log user out of Symfony 2 application using it's internal handlers 我创建了这个类,并在parameters.yml中添加了参数“security.logout_listener.class”,该参数是从config.yml导入的。
我的新班级正好是
# MyBundle/MyLogoutListener.php
namespace MyBundle;
use Symfony\Component\Security\Http\Firewall\LogoutListener;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpFoundation\Request;
class MyLogoutListener extends LogoutListener{
/**
* Whether this request is asking for logout.
*
* @param Request $request
*
* @return Boolean
*/
protected function requiresLogout(Request $request)
{
if ($request->hasSession())
if ( $request->getSession->get('logout') ) {
return true;
}
}
return parent::requiresLogout($request);
}
}
我在parameters.yml中添加的行是
security.logout_listener.class: MyBundle\MyLogoutListener
确定这些东西我在控制器的登录中可以激活一个良好的注销功能但是如果我尝试使用Symfony2的基本注销功能,我收到此错误:
运行时通知:声明 MyBundle \ MyLogoutListener :: requiresLogout()应与之兼容 Symfony的\分量\安全\ HTTP \防火墙\ LogoutListener :: requiresLogout(Symfony的\分量\ HttpFoundation \请求 $请求)
对于基本注销功能,我指的是防火墙中的配置:
…
logout:
path: /logout
target: /someaction
…
请问有人可以解释问题在哪里? 我是否需要使用MyLogoutListener定义服务?