如何解决使用两个 FormEvents::POST_SUBMIT 的监听器
我想根据提交的数据修改一些表单字段,所以在我所做的表单类中:
public function buildForm(FormBuilderInterface $builder,array $options)
{
$builder->add('year',ChoiceType::class,[
'choices' => ['Year' => '-1'] + array_combine(range(date('Y'),date('Y') - 19),range(date('Y'),date('Y') - 19)),'label' => false,])
->add('make',['choices' => ['Make' => '-1'],'label' => false])
->add('model',['choices' => ['Model' => '-1'],'label' => false]);
//...
$builder->get('year')->addEventListener(
FormEvents::POST_SUBMIT,function (FormEvent $event) {
$year = $event->getForm()->getData();
$makes = $year === '-1' ? ['Make' => '-1'] : $this->customService->getMakes();
$event->getForm()->getParent()
->add('make',['choices' => $makes,'label' => false]);
}
);
$builder->get('make')->addEventListener(
FormEvents::POST_SUBMIT,function (FormEvent $event) {
$make = $event->getForm()->getData();
$models = $make === '-1' ? ['Model' => '-1'] : $this->customService->getModels();
$event->getForm()->getParent()
->add('model',['choices' => $models,'label' => false]);
}
);
}
但是,即使我提交 make
字段,第二个侦听器也永远不会执行,因此我无法修改 model
字段。有什么想法吗?
解决方法
问题似乎是在修改 make
字段事件侦听器中的 year
字段时,永远不会调用 make
字段事件侦听器。我找到了一种让它工作的方法:
private $makes;
private $models;
public function buildForm(FormBuilderInterface $builder,array $options)
{
//...
$builder->get('year')->addEventListener(
FormEvents::POST_SUBMIT,function (FormEvent $event) {
$year = $event->getForm()->getData();
$this->makes = $year === '-1' ? ['Make' => '-1'] : $this->customService->getMakes();
}
);
$builder->get('make')->addEventListener(
FormEvents::POST_SUBMIT,function (FormEvent $event) {
$make = $event->getForm()->getData();
$this->models = $make === '-1' ? ['Model' => '-1'] : $this->customService->getModels();
$event->getForm()->getParent()
->add('make',ChoiceType::class,['choices' => $this->makes,'label' => false,'data' => $make]);
}
);
// Same with model field
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。