我正在尝试从自定义身份验证处理程序在数据库中编写一些登录失败信息。 我的问题是访问数据库,因为我不知道Doctrine对象可能存储在哪里
这是我现在的代码:
namespace MyApp\FrontBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request as Request;
use Symfony\Component\HttpFoundation\RedirectResponse as RedirectResponse;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\Security\Http\Authentication as Auth;
use Symfony\Component\Security\Core\Exception\AuthenticationException as AuthException;
class SecurityHandler implements Auth\AuthenticationFailureHandlerInterface
{
public function onAuthenticationFailure(Request $request, AuthException $token)
{
try
{
$lastLoginFailure = new DateTime();
// get database object here
}
catch(\Exception $ex)
{
}
}
}
有什么想法吗?
答案 0 :(得分:4)
将SecurityHandler转换为服务,然后将doctrine实体管理器注入其中。
答案 1 :(得分:3)
doctrine.orm.entity_manager
并粘贴到您的hadler构造函数参数,例如Doctrine\ORM\EntityManager;
答案 2 :(得分:-1)
如果您想使用服务,我认为您应该使用ContainerAware扩展您的类“SecurityHandler”,因为您的安全处理程序不是控制器。
class SecurityHandler extend ContainerAware implements Auth\AuthenticationFailureHandlerInterface{
public function onAuthenticationFailure(Request $request, AuthException $token)
{
try
{
$lastLoginFailure = new DateTime();
// get database object here
$doctrine = $this->container->get('doctrine');
$repository = $doctrine->getRepository('*NAME OF REPO*');
}
catch(\Exception $ex)
{
}
}
}