Php 扩展LogoutListener类后发生基本注销错误
我的目标是从能够正确执行基本注销机制的控制器执行注销。 在谷歌搜索和堆栈溢出一些类似的问题后,我尝试实现一个类LogoutListener的扩展,正如这里的答案所建议的那样 我已经创建了这个类,并且在parameters.yml中添加了参数“security.logout_listener.class”,该参数是从config.yml导入的 正是我的新班级Php 扩展LogoutListener类后发生基本注销错误,php,symfony,Php,Symfony,我的目标是从能够正确执行基本注销机制的控制器执行注销。 在谷歌搜索和堆栈溢出一些类似的问题后,我尝试实现一个类LogoutListener的扩展,正如这里的答案所建议的那样 我已经创建了这个类,并且在parameters.yml中添加了参数“security.logout_listener.class”,该参数是从config.yml导入的 正是我的新班级 # MyBundle/MyLogoutListener.php namespace MyBundle; use Symf
# 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\Component\Security\Http\Firewall\LogoutListener::requiresLogout(Symfony\Component\HttpFoundation\Request
$request)
对于基本注销功能,我指的是防火墙中的配置:
…
logout:
path: /logout
target: /someaction
…
有人能解释一下问题出在哪里吗?
我是否需要使用MyLogoutListener定义服务?您的
$request
对象当前正试图从与您的类相同的命名空间(即MyBundle
)中注入。在顶部添加use Symfony\Component\HttpFoundation\Request
语句。我添加了Request的用法,还添加了一个检查$Request是否有会话,但现在我收到以下错误:“注意:未定义的属性:Symfony\Component\HttpFoundation\Request:$getSession”$request->getSession->
表示您正在查找属性,如public$session
。但在本例中,getSession
是一种方法,您缺少大括号。将其更改为$request->getSession()->
Ok大括号表示错误。谢谢Artamiel,如果您将提示作为答案发布,我会将其作为正确答案进行签名。您的$request
对象当前正试图从与您的类相同的命名空间中注入,即MyBundle
。在顶部添加use Symfony\Component\HttpFoundation\Request
语句。我添加了Request的用法,还添加了一个检查$Request是否有会话,但现在我收到以下错误:“注意:未定义的属性:Symfony\Component\HttpFoundation\Request:$getSession”$request->getSession->
表示您正在查找属性,如public$session
。但在本例中,getSession
是一种方法,您缺少大括号。将其更改为$request->getSession()->
Ok大括号表示错误。谢谢Artamiel,如果您将提示作为答案发布,我会将其作为正确答案进行签名。您的$request
对象当前正试图从与您的类相同的命名空间中注入,即MyBundle
。在顶部添加use Symfony\Component\HttpFoundation\Request
语句。我添加了Request的用法,还添加了一个检查$Request是否有会话,但现在我收到以下错误:“注意:未定义的属性:Symfony\Component\HttpFoundation\Request:$getSession”$request->getSession->
表示您正在查找属性,如public$session
。但在本例中,getSession
是一种方法,您缺少大括号。将其更改为$request->getSession()->
Ok大括号表示错误。谢谢Artamiel,如果你把你的提示作为答案发布,我会在上面签名作为正确答案。