Это первый раз, когда я работаю с созданием настраиваемого диспетчера событий и подписчика, поэтому я пытаюсь понять это и, похоже, не могу понять, почему мое настраиваемое событие не отправляется.
Я следую документации. и в моем случае мне нужно отправить событие, как только кто-то зарегистрируется на сайте.
поэтому внутри моего registerAction()
я пытаюсь отправить такое событие
$dispatcher = new EventDispatcher();
$event = new RegistrationEvent($user);
$dispatcher->dispatch(RegistrationEvent::NAME, $event);
Это мой RegistrationEvent
класс
namespace AppBundle\Event;
use AppBundle\Entity\User;
use Symfony\Component\EventDispatcher\Event;
class RegistrationEvent extends Event
{
const NAME = 'registration.complete';
protected $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function getUser(){
return $this->user;
}
}
Это мой RegistrationSubscriber
класс
namespace AppBundle\Event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class RegistrationSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
KernelEvents::RESPONSE => array(
array('onKernelResponsePre', 10),
array('onKernelResponsePost', -10),
),
RegistrationEvent::NAME => 'onRegistration'
);
}
public function onKernelResponsePre(FilterResponseEvent $event)
{
// ...
}
public function onKernelResponsePost(FilterResponseEvent $event)
{
// ...
}
public function onRegistration(RegistrationEvent $event){
var_dump($event);
die;
}
}
Сделав это, я надеялся, что процесс регистрации остановится на функции onRegistration
, но этого не произошло, затем я посмотрел на вкладку «События» профилировщика и не вижу, чтобы мое событие также было в списке.
Что мне здесь не хватает? Толчок в правильном направлении будет действительно оценен.
Обновление: я подумал, что мне нужно зарегистрировать службу для пользовательского события, поэтому я добавил следующий код внутри services.yml
app.successfull_registration_subscriber:
class: AppBundle\Event\RegistrationSubscriber
arguments: ["@doctrine.orm.entity_manager"]
tags:
- { name: kernel.event_subscriber}
На вкладке «Событие» профилировщика я вижу свое пользовательское событие в списке, но оно все еще не отправляется.