Buduję aplikację Symfony i używając zdarzeń formularzy z jquery/ajaxem, aby wykonać całą rzecz "stan/lokalizacja". Mam jednak niewielki problem, używam formatu Prowincja -> Miasto -> Przedmieścia. Teraz o ile mogę powiedzieć, mój kod jest w porządku, ale gdy wykonanie uderza sekcję gdzie mogę dodać słuchacza „City” wybierz, to zgłasza błąd wypowiadając następujące:Dodaj detektor zdarzeń do elementu formularza dodanego przez detektor zdarzeń
The child with the name "physicalCity" does not exist.
To oczywiście dzieje się, gdy próbuję dodać detektor zdarzeń do nowo utworzonego pola, dodając detektor zdarzeń do elementu utworzonego przez detektor zdarzeń?
Sekcja kodu znajduje się poniżej ... Co robię źle? Każda pomoc będzie bardzo ceniona!
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);
}
);
}
Świetna robota! Uratowałeś mi dzień, dziękuję! :) – Gianluca78
Czy to działa podczas edycji również tej zawartości. Dla mnie tak nie było. Czy mógłbyś również odpowiedzieć, z którą wersją Symfony pracowałeś? – Jeet
Tak, to działało dla mnie. To był Sf 2.4. Wierzę, nie pamiętam dokładnie. Po prostu spróbuj grać z zadaniami decyzji konstruktora zapytań. Być może coś tam jest dziwne w twoim przypadku. I zainstaluj XDebug! Bardzo pomaga. – iLikeBreakfast