Symfony 4.4事件分派器

问题描述

我遇到以下错误

找不到服务“ event_dispatcher”:即使它存在于应用程序的容器中,“ App \ Controller \ ratingApiController”内部的容器也是一个较小的服务定位器,仅了解“ form.factory”,“ http_kernel”,“ parameter_bag”,“ request_stack”,“ router”,“ security.authorization_checker”,“ security.csrf.token_manager”,“ security.token_storage”,“ serializer”,“ session”和“ twig”服务。尝试改用依赖项注入。

我习惯使用

 $this->get('event_dispatcher')->dispatch( AverageratingEvent::NAME,new AverageratingEvent($rating));

用于调度事件,但是'event_dipatcher'给出了错误,我似乎找不到源。

这是我的控制器的一部分:

<?PHP

namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ODM\MongoDB\MongoDBException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use App\Document\rating;
use App\Event\AverageratingEvent;
use App\Form\Type\ratingType;
use App\Helpers\FormErroRSSerializer;
use Doctrine\ODM\MongoDB\DocumentManager;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Eventdispatcher\EventdispatcherInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Eventdispatcher\Event;

class ratingApiController extends AbstractController
{
    private $documentManager;
    public function __construct(DocumentManager $documentManager)
    {
        $this->documentManager = $documentManager;
    }

class ratingApiController extends AbstractController
{
    private $documentManager;
    public function __construct(DocumentManager $documentManager)
    {
        $this->documentManager = $documentManager;
    }

        
    /**
     * @Route("api/rating/create",name="Createrating",methods={"POST"})
     * @param DocumentManager $dm
     * @param Request $request
     * @return RedirectResponse|Response
     * @throws MongoDBException
     */
    public function addrating(Request $request,EventdispatcherInterface $dispatcher)
    {
        $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();
           
        //    $event = new AverageratingEvent($rating);
           $this->get('event_dispatcher')->dispatch( AverageratingEvent::NAME,new AverageratingEvent($rating));
        //    $dispatcher->dispatch(AverageratingEvent::NAME,$event);

}
}

解决方法

事件分发程序不包含在AbstractController容器中。

检查symfony文档: 在这里,您可以找到如何使用事件分配器的示例: https://symfony.com/doc/4.4/components/event_dispatcher.html