使用SessionLogoutHandler在数据库中添加数据

时间:2017-10-06 19:00:39

标签: symfony

我有一个symfony应用程序,其中logout()不是手动的:

  

(在文件routing.yml中)

SessionLogoutHandler class

我希望当我点击 / logout 时,我们必须能够在数据库中记录信息并为此使用:

namespace Symfony\Component\Security\Http\Logout;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;

use Compta\MyappliBundle\Entity\LogTache;
use Compta\MyappliBundle\Entity\User;
use Doctrine\ORM\EntityManager;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class SessionLogoutHandler implements LogoutHandlerInterface
{
    public function logout(Request $request, Response $response, TokenInterface $token)
    {

            $em = $this->getDoctrine()->getEntityManager();
            $user= $this->get('security.context')->getToken()->getUser();
            $u = new LogTache();

            $u->setDate(new \DateTime());
            $u->setUser($user->getUsername());
            $u->setActioneffectue('Déconnexion');

            $em->flush($u);

    $request->getSession()->invalidate();

    } }

这是我的代码:

Grant Type: Authorization Code

当我点击 / logout 时出现错误:

  

致命错误:调用未定义的方法   Symfony的\分量\安全\ HTTP \退出\ SessionLogoutHandler :: getDoctrine()   在   C:\ WAMP \ WWW \ MyAppli \供应商\ symfony中的\ src \的Symfony \分量\安全\ HTTP \退出\ SessionLogoutHandler.php   第46行

如何解决? 提前谢谢

原谅我的英文

1 个答案:

答案 0 :(得分:0)

您无权访问该类的容器。在控制器操作中更有可能找到$this->getDoctrine()...$this->get()

您可以添加构造函数并将“@doctrine”和“@ security.context”作为参数从服务定义传入,或者使用Symfony 3.3类型提示相应的类(对于Doctrine - Doctrine\Common\Persistence\ObjectManager)和在课堂上使用它们。

Symfony 2.6弃用了security.context服务,因此它也可能引用您运行旧版本的框架。升级可能带来额外的好处,例如v3.3 +服务的自动连接。