我建立一个Symfony的应用程序,并使用表单事件与一些jQuery的/ AJAX做全“国家/地区”的东西添加的元素。尽管我有一个小问题,我正在使用格式省 - >城市 - >郊区。现在,据我可以告诉我的代码是好的,但在执行打,我一个监听器添加到“城”的部分选择,它抛出一个错误说以下内容:添加事件侦听器,以形成由事件监听器
The child with the name "physicalCity" does not exist.
这显然当我尝试将事件侦听器添加到新创建的字段时,会发生这种情况,因此将事件侦听器添加到由事件侦听器创建的元素中?
的代码段是低于...我在做什么错?任何帮助将非常感谢!
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('schoolName')
->add('physicalProvince', 'entity', array(
'mapped' => false,
'class' => 'MY\MainBundle\Entity\Province',
'empty_value' => 'Select a province',
'attr' => array(
'class' => 'province',
'data-show' => 'physical-city',
)
));
/*
* For the physical cities
*/
$physicalCityModifier = function(FormInterface $form, Province $province = null) {
if (null !== $province)
$cities = $province->getCities();
else
$cities = array();
$form->add('physicalCity', 'entity', array(
'mapped' => false,
'class' => 'MY\MainBundle\Entity\City',
'empty_value' => 'Select a province first',
'choices' => $cities,
'attr' => array(
'class' => 'city physical-city',
'data-show' => 'physical-suburb'
)
));
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) use ($physicalCityModifier) {
$data = $event->getData();
if (is_object($data->getPhysicalSuburb()))
$province = $data->getPhysicalSuburb()->getCity()->getProvince();
else
$province = null;
$physicalCityModifier($event->getForm(), $province);
}
);
$builder->get('physicalProvince')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($physicalCityModifier) {
$province = $event->getForm()->getData();
$physicalCityModifier($event->getForm()->getParent(), $province);
}
);
/*
* For the physical suburbs
*/
$physicalSuburbModifier = function(FormInterface $form, City $city = null) {
if (null !== $city)
$suburbs = $city->getSuburbs();
else
$suburbs = array();
$form->add('physicalSuburb', null, array(
'choices' => $suburbs,
'empty_value' => 'Select a city first',
'attr' => array(
'class' => 'physical-suburb'
),
));
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) use ($physicalSuburbModifier) {
$data = $event->getData();
if (is_object($data->getCity()))
$city = $data->getCity();
else
$city = null;
$physicalSuburbModifier($event->getForm(), $city);
}
);
$builder->get('physicalCity')->addEventListener(
FormEvents::POST_SUBMIT,
function(FormEvent $event) use ($physicalSuburbModifier) {
$city = $event->getForm()->getData();
$physicalSuburbModifier($event->getForm()->getParent(), $city);
}
);
}
伟大的工作!你救了我的一天,谢谢你! :) – Gianluca78
当您编辑此内容时,此功能是否正常工作?对我来说它没有。你也可以回答你使用Symfony的哪个版本吗? – Jeet
是的,它为我工作。这是2.4我相信,记不清了。试着玩查询构建器的决策案例。你的情况可能有些奇怪。并安装XDebug!帮助很多。 – iLikeBreakfast