Symfony — Событие не отправляется

Это первый раз, когда я работаю над созданием пользовательского диспетчера событий и подписчика, поэтому я пытаюсь обернуть его вокруг, и я не могу понять, почему мое пользовательское событие не отправляется.

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

так внутри моего 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}

На вкладке «Событие» в профилировщике я вижу свое пользовательское событие в списке, но оно по-прежнему не отправляется.

1

Решение

Создавая свой собственный EventDispatcher Например, вы отправляете событие, которое никогда не будут прослушиваться другими слушателями (они не привязаны к этому экземпляру диспетчера). Вам нужно использовать event_dispatcher сервис для уведомления всех слушателей, которых вы пометили kernel.event_listener а также kernel.event_subscriber теги:

// ...

class RegistrationController extends Controller
{
public function registerAction()
{
// ...

$this->get('event_dispatcher')->dispatch(RegistrationEvent::NAME, new RegistrationEvent($user););
}
}
3

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

Дубликат диспетчер не отправляет мое событие symfony

С авто-проводкой теперь лучше вводить EventDispatcherInterface

<?php
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
//...

class DefaultController extends Controller
{
public function display(Request $request, EventDispatcherInterface $dispatcher)
{
//Define your event
$event = new YourEvent($request);
$dispatcher->dispatch(YourEvent::EVENT_TO_DISPATCH, $event);
}
}
0

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