Dies ist das erste Mal, dass ich mit der Erstellung von benutzerdefinierten Ereignis Dispatcher und Abonnenten arbeiten, so versuche ich, meinen Kopf um mich zu wickeln und ich kann nicht herausfinden, warum meine benutzerdefinierte Ereignis nicht gesendet wird .Symfony - Ereignis wird nicht gesendet
Ich folge der documentation und in meinem Fall muss ich ein Ereignis senden, sobald jemand auf der Website registriert.
so in meinem registerAction()
Ich versuche, ein Ereignis wie diese
$dispatcher = new EventDispatcher();
$event = new RegistrationEvent($user);
$dispatcher->dispatch(RegistrationEvent::NAME, $event);
Das ist meine RegistrationEvent
Klasse schicken
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;
}
}
Das ist meine RegistrationSubscriber
Klasse
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;
}
}
Nachdem ich Dies hatte ich gehofft, dass die Registrierung pr ocess würde bei der Funktion onRegistration
aufhören, aber das ist nicht passiert, ich habe dann auf die Registerkarte Ereignisse des Profilers geschaut und ich sehe nicht, dass meine Veranstaltung ihre entweder aufgelistet.
Was fehlt mir hier? Ein Schub in die richtige Richtung wird wirklich geschätzt.
Update: Ich dachte, ich brauche einen Service für das benutzerdefinierte Ereignis zu registrieren, so habe ich den folgenden Code innerhalb services.yml
app.successfull_registration_subscriber:
class: AppBundle\Event\RegistrationSubscriber
arguments: ["@doctrine.orm.entity_manager"]
tags:
- { name: kernel.event_subscriber}
Innerhalb der Registerkarte Ereignis von Profiler ich meine benutzerdefinierte Ereignis tun sehen werden aufgelistet aber es versendet immer noch nicht.
Vielen Dank, dass es :) jetzt gemacht funktionieren, wenn mein Verständnis richtig ist, jedes Mal, wenn ich eine Dispatch müssen custom event ich muss den code immer und immer wieder in verschiedenen aktionen des controllers oder in services schreiben, wenn die antwort darauf ja ist, wie kann ich dieses ereignis automatisch allen hörern zur verfügung stellen, anstatt es manuell zu versenden? Ich hoffe meine Frage macht Sinn – Saadia
Nun, die Frage ist, wie sollten Ihre Zuhörer wissen, dass das Ereignis passiert ist, wenn Sie es nicht versenden? Sie müssen den Event Dispatcher jedoch nicht immer vom Controller holen. Wenn Sie beispielsweise Ihre Dienste konfigurieren, können Sie einfach den Ereignis-Dispatcher in ihn einfügen, den Sie verwenden, um Ihre anderen Abhängigkeiten zu injizieren. – xabbuh