События HWIOauthBundle и FOSUserBundle не запускаются

Я следовал всем советам, найденным здесь по настройке HWIOAuthBundle с FOSUserBundle, но я хотят иметь доступ к событиям, запускаемым при регистрации пользователя, и пока не могут этого сделать. Следуя совету в этот вопрос, вот мое событие подписчик (обратите внимание, что меня не интересуют все события, я просто хотел проверить, было ли запущено какое-либо из них):

<?php
namespace Acme\ClientBundle\EventListener;

use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\Event\FormEvent;
use FOS\UserBundle\Event\GetResponseUserEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\UserEvent;
use Symfony\Bridge\Monolog\Logger;

/**
 * RegistrationConfirmListener
 */
class RegistrationConfirmListener implements EventSubscriberInterface
{
    /**
     * @var Logger
     */
    private $logger;

    function __construct(UrlGeneratorInterface $router, Logger $logger)
    {
        $this->router = $router;
        $this->logger = $logger;
    }

    public static function getSubscribedEvents()
    {
        return array(
            FOSUserEvents::REGISTRATION_INITIALIZE => 'onRegistrationInit',
            FOSUserEvents::REGISTRATION_CONFIRM    => 'onRegistrationConfirm',
            FOSUserEvents::REGISTRATION_CONFIRMED  => 'onRegistrationConfirmed',
            FOSUserEvents::REGISTRATION_COMPLETED  => 'onRegistrationCompleted',
            FOSUserEvents::REGISTRATION_SUCCESS    => 'onRegistrationSuccess',
        );
    }

    public function onRegistrationInit(UserEvent $event)
    {
        $this->logger->info('Registration has started: ' . serialize($event));
    }

    public function onRegistrationConfirm(GetResponseUserEvent $event)
    {
        $this->logger->info("Registration is confirming: " . serialize($event));
    }

    public function onRegistrationConfirmed(FilterUserResponseEvent $event)
    {
        $this->logger->info("Registration has been confirmed: " . serialize($event));
    }

    public function onRegistrationCompleted(FilterUserResponseEvent $event)
    {
        $this->logger->info("Registration has been completed: " . serialize($event));
    }

    public function onRegistrationSuccess(FormEvent $event)
    {
        $this->logger->info("Registration has been successful: " . serialize($event));
    }
}

И вот мое определение службы:

acme_user.registration_complete:
    class: Acme\ClientBundle\EventListener\RegistrationConfirmListener
    arguments: [ @router, @logger ]
    tags:
        - { name: kernel.event_subscriber }

Однако я не вижу ни одного зарегистрированного FOSUserEvents, даже если аутентификация/регистрация прошла успешно. Единственная другая информация, которая, по моему мнению, может иметь значение, заключается в том, что я также интегрирую FOSUserBundle с SonataAdminBundle, который также работает правильно. (Ну правильно, раз я разобрался как обновить FOSUserBundle до версии 2.0 и зафиксировал необходимые изменения.)

Кто-нибудь знает, чего мне здесь не хватает, чтобы подключиться к этим событиям?


person frak    schedule 28.08.2013    source источник
comment
Есть ли у вас другие службы, которые загружаются должным образом? Есть ли вероятность, что ваш файл services.yml не загружается? Контейнер приложения/консоли: отладка показывает вашу службу?   -  person Cerad    schedule 28.08.2013
comment
Да, служба загружается, и я вижу это, когда запускаю container:debug, но спасибо за дополнительный совет по отладке.   -  person frak    schedule 28.08.2013
comment
Является ли код, который вы разместили, вашим реальным кодом или вы отредактировали его для своего вопроса? Я спрашиваю, потому что ваш конструктор показывает только один аргумент. Он должен был выдать сообщение об ошибке. У вас есть error_reporting(E_ALL); где-то? Вызывают ли простые опечатки ошибку для вас?   -  person Cerad    schedule 28.08.2013
comment
Я отредактировал код для своего вопроса, так как маршрутизатор еще не используется, я добавил это обратно в   -  person frak    schedule 28.08.2013
comment
Хорошо. Я не вижу ничего плохого в обработке событий. Может быть, вставьте оператор die в onRegistrationInitialize. Возможно, регистратор неправильно инициализирован, и поэтому ваши сообщения журнала не сохраняются.   -  person Cerad    schedule 28.08.2013
comment
Только что попробовал и не повезло   -  person frak    schedule 28.08.2013
comment
И вы тестируете это, проходя процесс регистрации FOSUserBundle? Вы не переопределили контроллер регистрации? Если вы поместите оператор die в конструктор вашего слушателя, он умрет? Запускаете тест в режиме разработки? Типа царапать дно бочки здесь.   -  person Cerad    schedule 28.08.2013
comment
По порядку: нет, я прохожу процесс регистрации HWIOauth, нет, да и да.   -  person frak    schedule 28.08.2013
comment
Хорошо. Когда ничего не помогает, попробуйте удалить app/cache/dev. Вы упомянули о переходе с FOSUserBundle 1.x на 2.x. Возможно, вы каким-то образом все еще получаете доступ к контроллеру регистрации S1.x. Возможно, поместите оператор die в контроллер регистрации S2. Возможно, попробуйте полностью отправить событие с другого контроллера. Возможно, сделайте функциональный тест или команду symfony. Это будет что-то простое.   -  person Cerad    schedule 28.08.2013


Ответы (1)


Оказывается, HWIOAuthBundle не использует контроллер регистрации FOSUserBundle, поэтому он никогда не будет запускать эти события.

person frak    schedule 03.09.2013
comment
Нашли ли вы какие-либо события HWI OAuth, которые можно прослушать? - person darkbluesun; 29.12.2014
comment
Извините, я не смог найти - person frak; 29.12.2014