Chciałbym w swoim formularzu mieć możliwość dodania nowej kategorii. Z możliwością wyboru kategorii nadrzędnej. A dokładniej użytkownik w pieszym <select></select> wybiera kategorię główną. Na podstawie tej kategorii pobieram Ajaxem dzieci tej kategorii. Jeżeli są dzieci to AJAX tworzy poniżej kolejnego selecta w którym wybieramy dziecko.
Doszedłem do momentu w którym wysyłam dane AJAXem, a Controller zwraca mi tablice obiektów z dziećmi danej kategorii. I to działa poprawnie
I jak teraz stworzyć nowego selecta z w którym do wyboru będzie lista dzieci zwróconych AJAXem ?
CategoryController.php
<?php namespace Test\AdminBundle\Controller; use Test\AdminBundle\Entity\Category as Category; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request as Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Serializer\Serializer; use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer; use Symfony\Component\Serializer\Encoder\JsonEncoder; class CategoryController extends Controller { public function newAction(Request $request) { $em = $this->getDoctrine()->getManager(); $categoryRepository = $em->getRepository('TestAdminBundle:Category'); $children = $categoryRepository->getChildren($root); $form = $this->CreateFormBuilder() ->setAction('') 'class' => 'TestAdminBundle:Category', 'property' =>'name', 'choices' => $children )) ->add('name','text') ->getForm(); $form->handleRequest($request); if($form->isValid()){ $data = $form->getData(); $newCategory = new Category(); $newCategory->setName($data['name']); $em = $this->getDoctrine()->getManager(); $categoryRepository = $em->getRepository('TestAdminBundle:Category'); $categoryRepository->addChild($root, $newCategory); } return $this->render('TestAdminBundle:Category:new.html.twig', 'form' => $form->createView(), ) ); } public function listAction() { return $this->render('TestAdminBundle:Category:list.html.twig'); } public function getChildrenAction() { $request = Request::createFromGlobals(); JsonEncoder())); $em = $this->getDoctrine()->getManager(); $categoryRepository = $em->getRepository('TestAdminBundle:Category'); $children = $categoryRepository->getChildren($root); $data = $serializer->serialize($children, 'json'); $response = new JsonResponse(); $response->setData($data); return $response; } }
new.html.twig
{% extends 'TestAdminBundle::base.html.twig' %} {% block body %} <div class="row"> <div class="col-md-4"> <ul class="breadcrumb"> </ul> </div> <div class="col-md-8"> <div class="top-content"> <ul class="list-inline mini-stat"> <li> <h5>LIKES </h5> </li> <li> <h5>SUBSCRIBERS </h5> </li> <li> <h5>CUSTOMERS </h5> </li> </ul> </div> </div> <!-- main --> <div class="content"> <div class="main-header"> </div> <div class="main-content"> <div class="row"> <div class="col-md-10"> <!-- BASIC VALIDATION --> <div class="widget"> <div class="widget-header"> </div> <div class="widget-content"> {{ form_start(form, {'attr':{ 'id':'basic-form', novalidate:'novalidate' }}) }} <div class="form-group"> {{ form_label(form.id, 'Wybierz kategorię nadrzędną') }} {{ form_widget( form.id, { 'attr': {'name':'id', 'class':'form-control id'} } ) }} <script> $('.id').change(function(){ var id = $('.id').val(); $.ajax({ type: "POST", url: "{{ path('AjaxAdminCategoryGetChildren') }}", dataType: 'json', data: { id: id }, success : function(response) { //co zrobic tu aby w HTML pojawił sie nowy select, tak abym mógl //go obsluzyc w CategoryController } }) }) </script> </div> <div class="form-group"> {{ form_label(form.name, 'Nazwa') }} {{ form_widget( form.name, {'attr':{'name':'name', 'class':'form-control', 'id':'text-input', 'placeholder':'Wpisz nazwę kategorii'}} ) }} </div> {{ form_end(form) }} </div> </div> <!-- END BASIC VALIDATION --> </div> </div> </div> </div> {% endblock %}