Получение доктрины dbal является нулевым при инициализации приложения

Я использовал обработчик успеха аутентификации, чтобы заполнить некоторые значения в сеансе при каждом успешном входе в систему. Я хотел, чтобы была выполнена какая-то операция с базой данных, поэтому я передаю @ doctrine.dbal.default_connection из моего конфигурационного файла. Вот мой конфигурационный файл, где я переопределяю функцию success_handler.

services:
security.authentication.success_handler:
class:  XYZ\UserBundle\Handler\AuthenticationSuccessHandler
arguments:  ["@security.http_utils", {}, @doctrine.dbal.default_connection]
tags:
- { name: 'monolog.logger', channel: 'security' }

В AuthenticationSuccessHandler.php мой код выглядит так …

namespace Sourcen\UserBundle\Handler;

use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandler;
use Symfony\Component\Security\Http\HttpUtils;
use Doctrine\DBAL\Connection;class AuthenticationSuccessHandler extends DefaultAuthenticationSuccessHandler {

private $connection;

public function __construct( HttpUtils $httpUtils, array $options, Connection $dbalConnection ) {
$this->connection = $dbalConnection;
parent::__construct( $httpUtils, $options );
}

public function onAuthenticationSuccess( Request $request, TokenInterface $token ) {
$response = parent::onAuthenticationSuccess( $request, $token );
// DB CODE GOES
return $response;
}
}

Это работает, когда я выполняю некоторые URL контроллера напрямую. Но когда я выполняю домашний URL своего приложения, например «www.xyz.com/web», он выдает следующую ошибку …

 Catchable fatal error: Argument 3 passed to XYZ\UserBundle\Handler\AuthenticationSuccessHandler::__construct() must be an instance of Doctrine\DBAL\Connection, none given, called in /opt/lampp/xyz/app/cache/prod/appProdProjectContainer.php on line 1006 and defined in /opt/lampp/xyz/src/Sourcen/UserBundle/Handler/AuthenticationSuccessHandler.php on line 18

Есть идеи, как это можно решить?

0

Решение

Вам не нужно продлевать DefaultAuthenticationSuccessHandlerучебный класс.

Попробуйте определить свой класс обслуживания как:

namespace XYZ\UserBundle\Handler;

use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Doctrine\DBAL\Connection;class AuthenticationSuccessHandler  {

private $connection;

public function __construct( Connection $dbalConnection ) {
$this->connection = $dbalConnection;
}

public function onAuthenticationSuccess( InteractiveLoginEvent $event ) {
$user = $event->getAuthenticationToken()->getUser();

// DB CODE GOES
return $response;
}
}

и настройте свой сервис, помеченный как компонент прослушивателя событий security.interactive_login

services:
security.authentication.success_handler:
class:  XYZ\UserBundle\Handler\AuthenticationSuccessHandler
arguments:  [@doctrine.dbal.default_connection]
tags:
- { name: 'kernel.event_listener', event: 'security.interactive_login'. method:'onAuthenticationSuccess' }

PS: почему вы не используете doctrine.orm.entity_managerвместо doctrine.dbal.default_connection? (В моем SF у меня нет этой службы в php app/console container:debug команда)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]