Tôi đang tạo ứng dụng Symfony và sử dụng các sự kiện biểu mẫu với một số jquery/ajax để thực hiện toàn bộ "trạng thái/địa phương". Tôi có một vấn đề nhỏ mặc dù, tôi đang sử dụng định dạng Tỉnh -> Thành phố -> Ngoại ô. Bây giờ như xa như tôi có thể nói với mã của tôi là tốt, nhưng khi thực hiện lượt truy cập các phần mà tôi thêm một người nghe đến "Thành phố" lựa chọn, nó ném một lỗi nói như sau:Thêm trình xử lý sự kiện để tạo thành phần tử được thêm bởi trình nghe sự kiện
The child with the name "physicalCity" does not exist.
Điều này rõ ràng xảy ra khi tôi thử và thêm trình xử lý sự kiện vào trường mới được tạo, do đó thêm trình xử lý sự kiện vào phần tử được tạo bởi trình xử lý sự kiện?
Một phần của mã bên dưới ... Tôi đang làm gì sai? Bất kỳ trợ giúp sẽ được rất nhiều đánh giá cao!
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);
}
);
}
Công việc tuyệt vời! Bạn đã cứu ngày của tôi, cảm ơn bạn! :) – Gianluca78
Tính năng này có hoạt động khi bạn chỉnh sửa nội dung này không. Đối với tôi thì không. Bạn cũng có thể trả lời phiên bản Symfony nào mà bạn đã làm việc này? – Jeet
Có nó đã làm việc cho tôi. Đây là Sf 2.4 tôi tin, không thể nhớ chính xác. Chỉ cần thử và chơi với các trường hợp quyết định trình xây dựng truy vấn. Có lẽ một cái gì đó trong đó là lạ với trường hợp của bạn. Và cài đặt XDebug! Giúp đỡ rất nhiều. – iLikeBreakfast