Symfony 4.4 事件侦听器错误 (MongoDB)

Symfony 4.4 Event Listener Error (MongoDB)

我正在尝试创建一个监听器,以监听何时创建新评级。我遵循了所有文档,但我不断收到相同的错误: 传递给“Symfony\Component\EventDispatcher\EventDispatcherInterface::dispatch()”的参数 1 必须是给定的“Symfony\Component\EventDispatcher\Event”、“App\Event\AverageRatingEvent”的实例。

我正在尝试在活动中使用 Symfony\Component\EventDispatcher\Event,但它一直说它已被弃用,并且根据文档,改为使用 Symfony\Contracts\EventDispatcher\Event。

我在服务中注册了我的事件,下面是我的事件、事件监听器和class

Class 评分

class RatingApiController extends AbstractController
{
        
    /**
     * @Route("api/rating/create", name="CreateRating",  methods={"POST"})
     * @param DocumentManager $dm
     * @param Request $request
     * @param EventDispatcher $eventDispatcher
     * @return RedirectResponse|Response
     * @throws MongoDBException
     * 
     */
    public function addRating(Request $request, EventDispatcherInterface $eventDispatcher)
    {
        $response = [];

        $form = $this->
        createForm(RatingType::class, new Rating() ,array('csrf_protection' => false));  
        
        $request = json_decode($request->getContent(), true);
        
        
        $form->submit($request);

        if($form->isSubmitted() && $form->isValid())
        {
        
           $rating = $form->getData();

           $this->documentManager->persist($rating);
           $this->documentManager->flush();
           
           $averageRatingEvent = new AverageRatingEvent($rating);
           $eventDispatcher->dispatch( AverageRatingEvent::NAME, $averageRatingEvent);
            

           $status = 200;
           $response = ["status" => $status, "success" => true, "data" => $rating->getId()];
           // return $this->redirectToRoute('rating_list'); 
       }



}

事件

<?php
namespace App\Event;

use App\Document\Rating;
use Symfony\Contracts\EventDispatcher\Event;

class AverageRatingEvent extends Event
{
    /**
     * @var Rating $rating
     */
    protected $rating;

    public const NAME = "average.rating";
    
    public function __construct(Rating $rating)
    {
        $this->rating = $rating;        
    }

    public function getRating()
    {
        return $this->rating;
    }
    
}

监听器

<?php

namespace App\Event;

use App\Document\Rating;
use Doctrine\ODM\MongoDB\Event\LifecycleEventArgs;

class AverageRatingListener
{
    public function postPersist(LifecycleEventArgs $args)
    {
        $document = $args->getObject();
        if(!$document instanceof Rating)
        return;
    }


    public function RatingCreated()
    {
        dump("Hello a rating was just added");
    }
}

在 AverageRatingEvent 中扩展事件。

使用需要从

更改
use Symfony\Contracts\EventDispatcher\Event;

use Symfony\Component\EventDispatcher\Event;