Symfony2: прослушиватель событий прерывает панель инструментов отладки на странице входа

У меня есть приложение Symfony2. Я хочу установить локаль, когда пользователь входит в last_login_locale, которая хранится в БД.

Здесь services.yml:

login_listener:
class: AppBundle\EventListener\AuthListener
arguments:
- @request_stack
- @users_manager
- @session
tags:
-  { name: kernel.event_subscriber }

Вот AuthListener.php:

<?php

namespace AppBundle\EventListener;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\AuthenticationEvents;
use Symfony\Component\HttpFoundation\RequestStack;
use AppBundle\Doctrine\DBAL\DBALManager;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use Symfony\Component\HttpFoundation\Session\Session;

class AuthListener implements EventSubscriberInterface
{
protected $requestStack;
protected $usersManager;
protected $session;

public function __construct(RequestStack $requestStack, DBALManager $usersManager, Session $session)
{
$this->requestStack = $requestStack;
$this->usersManager = $usersManager;
$this->session = $session;
}

public static function getSubscribedEvents()
{
return [
AuthenticationEvents::AUTHENTICATION_SUCCESS => 'onAuthenticationSuccess',
];
}

public function onAuthenticationSuccess($event)
{
// even empty function cause error
// here i get locale from db and set to session

}
}

Я получаю ошибку [GET] / _wdt / f3a2ee 404 Not found, даже если я оставляю onAuthenticationSuccess пустым. Ошибка возникает только на странице входа в систему.
введите описание изображения здесь

3

Решение

Кажется, это работает нормально для меня на Symfony 2.7

namespace Acme\YourBundle\Listeners;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
use Symfony\Component\Security\Core\AuthenticationEvents;
use Symfony\Component\Security\Core\Event\AuthenticationEvent;

class AuthenticationListener implements EventSubscriberInterface
{

public function onAuthenticationSuccess(AuthenticationEvent  $event) {
if(!$event->getAuthenticationToken() instanceof AnonymousToken) {
// Apply action only when the user is actually authenticated and not a guest.
// If the user is authenticated, the token will be `UsernamePasswordToken`.
}
}

public static function getSubscribedEvents() {
return array(
AuthenticationEvents::AUTHENTICATION_SUCCESS => 'onAuthenticationSuccess'
);
}
}

В services.yml:

acme.security.authentication_event_listener:
class: Acme\YourBundle\Listeners\AuthenticationListener
tags:
- { name: kernel.event_subscriber, event: security.authentication.success, method: onAuthenticationSuccess }
1

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

Я говорю по-испански, но я постараюсь ответить на английском, извините, если я напишу что-то не так.

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

Я не знаю, почему ваш класс DBAL, кажется, имеет проблемы, так как он выделен синим цветом.

В моем случае проблема заключалась в том, что я забыл пространство имен класса и у меня была такая же ошибка.

Я надеюсь, что это поможет вам.

0

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