如何解决Symfony 4.4事件监听器错误MongoDB
我正在尝试创建一个创建新评级的侦听器。我遵循了所有文档,但始终遇到相同的错误: 传递给“ Symfony \ Component \ EventDispatcher \ EventDispatcherInterface :: dispatch()”的参数1必须是“ Symfony \ Component \ EventDispatcher \ Event”,“ App \ Event \ AverageRatingEvent”的实例。
我正在尝试在事件中使用Symfony \ Component \ EventDispatcher \ Event,但它一直说它已被弃用,并根据文档改用Symfony \ Contracts \ EventDispatcher \ Event。
我在服务中注册了我的活动,以下是我的活动,eventlistener和课程
课程评分
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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。