Я ищу помощь для отображения части моей базы данных в соответствии с моими предыдущими вариантами выбора в кнопке выбора - PullRequest
0 голосов
/ 11 апреля 2019

Я изучаю веб-разработку и на самом деле застрял в проблеме.

У меня есть две кнопки выбора, в которых отображается моя база данных, проблема в том, что я хотел бы, чтобы вторая кнопка выбора отображала только результаты, основанные на первой. Немного похоже на то, если бы первая кнопка выбора имела бы внутри «Числа» и «Буквы», а вторая в результате была бы внутри «1», «2», «3», если в первой кнопке выбора мы выбираем «Числа» и «а» «б», «в», если мы выберем «Письма». В настоящее время у меня только полное отображение всей моей базы данных за секунду, и она не выполняет сортировку. Я много чего пробовал, но не очень хорошо работал, поэтому я прихожу сюда, чтобы получить помощь или советы.

В настоящее время я работаю с Symfony 3.4 и над Ubuntu.

Вот код моей первой кнопки выбора

<select id="sel1" class="formDevis" >
                            <option> Cliquez pour choisir </option>
                        {% for categorie in categories %}
                            <option>{{ categorie.nomCategories }} 
                            </option>
                        {% endfor %}
</select>

Вот код для моей второй кнопки выбора

<select id="prod1" class="formDevis">
                            <option> Cliquez pour choisir </option>
                            <option>Non spécifié</option>
                            {% for produit in produits %}
                                <option>{{ produit.nomProduits }} 
                                </option>
                            {% endfor %}
</select>

А вот код, который я использую в своем контроллере


/**
     * Lists all devis entities.
     *
     * @Route("/", name="admin_devis_index")
     * @Method("GET")
     */
    public function indexAction()
    {
        $em = $this->getDoctrine()->getManager();

        $devis = $em->getRepository('DevisBundle:Devis')->findAll();
        $produits = $em->getRepository('DevisBundle:Produits')->findAll();
        $categories = $em->getRepository('DevisBundle:Categories')->findAll();


        return $this->render('categories/devis.html.twig', array(
            'produits' => $produits,
            'devis' => $devis,
            'categories' => $categories
        ));
    }

Я попытался на второй кнопке выбрать отображение моей базы данных в соответствии с выбором первой кнопки, но мне удалось получить полное отображение.

1 Ответ

0 голосов
/ 12 апреля 2019

Вы можете сделать это, используя JavaScript следующим образом:

$('#select_input').change(function () {//this is your main select
          var categorySelect = $(this);

          $.ajax({//here you ask the backend for the dependent objects
            url: Routing.generate('dependent_products', {id: categorySelect.val()}),
            type: "GET",
            success: function (products) {
              var productsSelect = $("#products_select");  //this is your target            

              productsSelect.html('');              

              productsSelect.append('<option value> Select a product of ' + categorySelect.find("option:selected").text() + ' ...</option>');              

              $.each(products, function (key, product) {//here you build the dependent select
                productsSelect.append('<option value="' + product.id + '">' + product.name + '</option>');
              });              
            },
            error: function (err) {
              alert("An error ocurred while loading data ...");
            }
       });
 });

Следующий шаг - настройка маршрутизации и действия контроллера.

dependent_subcategories:
    path:     /dropdowns/{id}/subcategories
    defaults: { _controller: "AppBundle:Util:returnProductsOf" }
    methods:  GET
    options:
        expose: true

Контроллер

public function returnProductsOfAction(Request $request, Categories $categories)
    {
        return new JsonResponse($this->getDoctrine()->getRepository('BackendBundle:Products')->findByCategory($categories));

    }

Обратите внимание, что если вы используете это внутри формы, вам нужно добавить События формы

Надеюсь, это поможет!

...