我有一个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行
如何解决? 提前谢谢
原谅我的英文
答案 0 :(得分:0)
您无权访问该类的容器。在控制器操作中更有可能找到$this->getDoctrine()...
和$this->get()
。
您可以添加构造函数并将“@doctrine”和“@ security.context”作为参数从服务定义传入,或者使用Symfony 3.3类型提示相应的类(对于Doctrine - Doctrine\Common\Persistence\ObjectManager
)和在课堂上使用它们。
Symfony 2.6弃用了security.context服务,因此它也可能引用您运行旧版本的框架。升级可能带来额外的好处,例如v3.3 +服务的自动连接。