Symfony 5 为什么我不能在我的表单事件监听器中使用 FormsEvents::POST_SUBMIT?

Symfony 5 why can't I use FormsEvents::POST_SUBMIT in my form event listener?

我正在尝试将 EventListener 添加到我的 Symfony 表单,但我对 $builder->addEventListener 的第一个参数 $listener 有疑问。我想在提交后使用 FormEvents::POST_SUBMIT 生成一个新字段。基本上我想根据邮政编码显示城市列表。 该错误告诉我该对象的类型错误,但我看不到我可以使用哪个对象,因为文档告诉我这样做。我正在开发 Symfony 5.2

这是我的表单代码和错误:

<?php

namespace App\Form;

use App\Entity\Advert;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Event\PostSubmitEvent;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;

use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;

class CreateAdvertType extends AbstractType
{
    private $entityManager;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {


        $repositoryCities=$this->entityManager->getRepository('App\Entity\Cities');
        $cities = $repositoryCities->findByPostal("86330");

        $repositoryMake=$this->entityManager->getRepository('App\Entity\Make');
        $makes = $repositoryMake->findAll();

        $builder
            ->add('car_make',EntityType::class, array(
                'class' => 'App\Entity\Make',
                'choices'  => $makes,
            ))
            ->add('car_model')
            ->add('car_motorisation')
            ->add('car_fuel',ChoiceType::class, array(
                'choices'  => [
                    'Diesel' => 'diesel',
                    'Essence' => 'essence',
                    'Electrique' => 'electrique',
                    'Hybride' => 'hybride',
                ],
            ))

            ->add('price', IntegerType::class, array(
                'attr' => array(
                    'min' => 0,
                    'max' => 20,
                )
            ))
            ->add('code_postal')
            ->add('description')

            ->add('save', SubmitType::class, ['label' => 'Create Task'])

            ->addEventListener(FormEvents::POST_SUBMIT,function (FormEvents $event){
                $repository=$this->getDoctrine()->getManager()->getRepository('App\Entity\Cities');
                $form = $event->getForm();
                $cities = $repository->findByPostal($form->getData()['code_postal']);
                $form->add('city' ,EntityType::class, array(
                    'class' => 'App\Entity\Cities',
                    'choices' => $cities
                ));
            })



        ;


    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Advert::class,
        ]);
    }
}

Argument 1 passed to App\Form\CreateAdvertType::App\Form\{closure}() must be an instance of Symfony\Component\Form\FormEvents, instance of Symfony\Component\Form\Event\PreSetDataEvent given, called in /var/www/html/trymycar/vendor/symfony/event-dispatcher/EventDispatcher.php on line 230

应该是FormEvent(单数不是复数)。

//           plural HERE ---v                singular HERE ---v
->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
    // ...
})