Доступ к доктрине из обработчика ошибок аутентификации в Symfony2 - PullRequest
2 голосов
/ 29 февраля 2012

Я пытаюсь записать некоторую информацию об ошибке входа в базу данных из пользовательского обработчика аутентификации. Моя проблема - получить доступ к базе данных, так как я не знаю, где может храниться объект 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)
        {
        }
    }
}

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 29 февраля 2012

Превратите ваш SecurityHandler в сервис, а затем внедрите в него менеджера сущностей доктрины.

http://symfony.com/doc/current/book/service_container.html

3 голосов
/ 30 ноября 2012
  1. Запустить команду php app / console container: отладка.
  2. Скопируйте doctrine.orm.entity_manager и вставьте в ваш конструктор hasler аргументы типа
    [...., @ doctrine.orm.entity_manager].
  3. В хадлерском использовании Doctrine\ORM\EntityManager;
0 голосов
/ 29 февраля 2012

Я думаю, что вы должны расширить свой класс "SecurityHandler" с ContainerAware, если вы хотите использовать службу, поскольку ваш обработчик безопасности не является контроллером.

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)
        {
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...