カスタムイベントディスパッチャとサブスクライバを作成しているので、私は自分の頭を包み込みたいと思っています。カスタムイベントがディスパッチされない理由を知ることができます。 。Symfony - イベントがディスパッチされていない
私はdocumentationに従っています。私の場合は、誰かがサイトに登録するとすぐにイベントを送信する必要があります。その内部
私registerAction()
私はこれが行った後、私の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;
}
}
である。これは私の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;
}
}
あるこの
$dispatcher = new EventDispatcher();
$event = new RegistrationEvent($user);
$dispatcher->dispatch(RegistrationEvent::NAME, $event);
のようなイベントを送出しようとしていますこれは、私は登録pr odoは関数onRegistration
で停止しますが、それは起こりませんでした。プロファイラの[イベント]タブを見て、私のイベントがリストされているのを見ていません。
私はここで何が欠けていますか?正しい方向へのプッシュは本当に感謝されます。
アップデート:私は、プロファイラの[イベント]タブ内services.yml
app.successfull_registration_subscriber:
class: AppBundle\Event\RegistrationSubscriber
arguments: ["@doctrine.orm.entity_manager"]
tags:
- { name: kernel.event_subscriber}
の内側に次のコードを追加しましたので 私は私のカスタムイベントがリストされ参照してくださいか、私はカスタムイベントのためにサービスを登録する必要があります考えしかしそれはまだ発送しません。
私の理解が正しければ、それは今:)働かせた多くのおかげで、私は派遣する必要があるたびに、カスタムイベント私は物理的にコントローラーやサービスの異なるアクションに何度も繰り返しコードを書く必要があります。答えがイエスならば、手動でディスパッチするのではなく、どのイベントを自動的にすべてのリスナーが利用できるようにするのですか?私は自分の質問が理にかなってくれることを願っています。 – Saadia
質問は、あなたが派遣しなければイベントが起こったことをあなたのリスナーがどのように知るべきですか?あなたがする必要はありませんが、常にコントローラからイベントディスパッチャをフェッチすることです。たとえば、サービスをコンフィグレーションするときに、他の依存関係をインジェクトするのと同じように、イベントディスパッチャをイベントハンドラに挿入することができます。 – xabbuh