Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 扩展LogoutListener类后发生基本注销错误_Php_Symfony - Fatal编程技术网

Php 扩展LogoutListener类后发生基本注销错误

Php 扩展LogoutListener类后发生基本注销错误,php,symfony,Php,Symfony,我的目标是从能够正确执行基本注销机制的控制器执行注销。 在谷歌搜索和堆栈溢出一些类似的问题后,我尝试实现一个类LogoutListener的扩展,正如这里的答案所建议的那样 我已经创建了这个类,并且在parameters.yml中添加了参数“security.logout_listener.class”,该参数是从config.yml导入的 正是我的新班级 # MyBundle/MyLogoutListener.php namespace MyBundle; use Symf

我的目标是从能够正确执行基本注销机制的控制器执行注销。 在谷歌搜索和堆栈溢出一些类似的问题后,我尝试实现一个类LogoutListener的扩展,正如这里的答案所建议的那样 我已经创建了这个类,并且在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\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,如果你把你的提示作为答案发布,我会在上面签名作为正确答案。