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;
我正在尝试创建一个监听器,以监听何时创建新评级。我遵循了所有文档,但我不断收到相同的错误: 传递给“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;