In the end, I decided to use this method: JavaScript:
$('select[name*="[category][category]"]').prop('selected', true).change(function(){ var Id = $(this).val(); var url = Routing.generate('route_to_retrieve_subcategory'); $.post(url, { 'idCat': Id }, function(results){ var sub = $('select[name*="[category][category]"]').parent().find('select[name*="[subCategory][]"]'); sub.empty(); $.each(results , function(key, value) { sub .append($("<option></option>") .attr("value",value.id) .text(value.subCategory)); }); }); });
controller:
public function getSubcategoryAction(Request $request) { $Id = $request->get('idCat'); $em = $this->getDoctrine()->getManager(); $entities = $em->getRepository('MyBusinessBundle:SubCategories')->findSubCategories($Id); $output = array(); foreach ($entities as $member) { $output[] = array( 'id' => $member->getId(), 'subCategory' => $member->getSubCategory(), ); } $response = new Response(); $response->headers->set('Content-Type', 'application/json'); $response->setContent(json_encode($output)); return $response; }
Route:
route_to_retrieve_subcategory: pattern: /route_to_retrieve_subcategory defaults: { _controller: "MyBusinessBundle:ajax:getSubcategory" } options: expose: true
I prefer not to pass parameters through the course, I feel that this makes no sense!
Many thanks to Shryuzhan Shetti for the inspiration.
source share