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



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

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

<?php
namespace AppForm;
use AppEntityAdvert;
use DoctrineORMEntityManagerInterface;
use SymfonyBridgeDoctrineFormTypeEntityType;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormEventPostSubmitEvent;
use SymfonyComponentFormExtensionCoreTypeButtonType;
use SymfonyComponentFormExtensionCoreTypeChoiceType;
use SymfonyComponentFormExtensionCoreTypeDateTimeType;
use SymfonyComponentFormExtensionCoreTypeDateType;
use SymfonyComponentFormExtensionCoreTypeIntegerType;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentFormFormEvent;
use SymfonyComponentFormFormEvents;
use SymfonyComponentOptionsResolverOptionsResolver;
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('AppEntityCities');
$cities = $repositoryCities->findByPostal("86330");
$repositoryMake=$this->entityManager->getRepository('AppEntityMake');
$makes = $repositoryMake->findAll();
$builder
->add('car_make',EntityType::class, array(
'class' => 'AppEntityMake',
'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('AppEntityCities');
$form = $event->getForm();
$cities = $repository->findByPostal($form->getData()['code_postal']);
$form->add('city' ,EntityType::class, array(
'class' => 'AppEntityCities',
'choices' => $cities
));
})

;

}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Advert::class,
]);
}
}
Argument 1 passed to AppFormCreateAdvertType::AppForm{closure}() must be an instance of SymfonyComponentFormFormEvents, instance of SymfonyComponentFormEventPreSetDataEvent 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) {
// ...
})

最新更新