Вывести массив из контроллера javascript в symfony с помощью ajax - PullRequest
0 голосов
/ 17 апреля 2020

Начиная с одной недели, я пытаюсь разместить 2 массива из Js на моем php контроллере, используя Ajax, но когда я пытаюсь получить его в моем контроллере, он становится пустым, поэтому я не знаю, что делать.

Это моя javascript функция. Он основан на форме, когда пользователь вводит адреса отправителя и прибытия. При этом я использую API для геокодирования и помещаю его в два массива ordonneeDepart и ordonneeArrive, но когда я публикую его, он не работает, моя переменная равна нулю в моем php, я не вижу, почему, когда я консоль. войдите в мой js все в порядке, координаты в моем массиве!

Если кто-то может мне помочь, это было бы очень любезно! Я надеюсь, что все ясно!

$(document).ready(function() { 

      var coordoneesDepart=new Array(2);
      var coordoneesArrive=new Array(2);                     
      var connexion = $('.routeConnexion').data('routeController');

      if(navigator.geolocation){
        navigator.geolocation.getCurrentPosition(function(position){
            coordoneesDepart[0]= position.coords.latitude;
            coordoneesDepart[1] = position.coords.longitude;
            $.ajax({
              url:"https://api-adresse.data.gouv.fr/reverse/?lon="+coordoneesDepart[1]+"&lat="+coordoneesDepart[0],
              success: function (data){
                document.getElementById("form_cp1").value= data.features[0].properties.postcode;
                document.getElementById("form_adresse1").value=data.features[0].properties.name;

              }

            })
        });
      } 

      $("#form_cp1").autocomplete({
        source: function (request, response) {
          $.ajax({
            url: "https://api-adresse.data.gouv.fr/search/?postcode="+$("input[name='form[cp1]']").val(),
            data: { q: request.term },
            dataType: "json",
            success: function (data) {
              var postcodes = [];
              response($.map(data.features, function (item) {
                // Ici on est obligé d'ajouter les CP dans un array pour ne pas avoir plusieurs fois le même
                if ($.inArray(item.properties.postcode, postcodes) == -1) {
                  postcodes.push(item.properties.postcode);
                  return { label: item.properties.postcode + " - " + item.properties.city, 
                      city: item.properties.city,
                      value: item.properties.postcode
                  };
                }
              }));
            }
          });
        }
      });

      $("#form_adresse1").autocomplete({
        source: function (request, response) {
          $.ajax({
            url: "https://api-adresse.data.gouv.fr/search/?postcode="+$("input[name='form[cp1]']").val(),
            data: { q: request.term },
            dataType: "json",
            success: function (data) {
              coordoneesDepart[0] =data.features[0].geometry.coordinates[1];
              coordoneesDepart[1] =data.features[0].geometry.coordinates[0];
              console.log(coordoneesDepart);                                            
              response($.map(data.features, function (item) {
                return { label: item.properties.name, value: item.properties.name};
              }));
            }
          });
        }
      });

      $("#form_cp2").autocomplete({
        source: function (request, response) {
          $.ajax({
            url: "https://api-adresse.data.gouv.fr/search/?postcode="+$("input[name='form[cp2]']").val(),
            data: { q: request.term },
            dataType: "json",
            success: function (data) {
              var postcodes = [];
              response($.map(data.features, function (item) {
                // Ici on est obligé d'ajouter les CP dans un array pour ne pas avoir plusieurs fois le même
                if ($.inArray(item.properties.postcode, postcodes) == -1) {
                  postcodes.push(item.properties.postcode);
                  return { label: item.properties.postcode + " - " + item.properties.city, 
                      city: item.properties.city,
                      value: item.properties.postcode
                  };
                }
              }));
            }
          });
        }
      });

      $("#form_adresse2").autocomplete({
        source: function (request, response) {
          $.ajax({
            url: "https://api-adresse.data.gouv.fr/search/?postcode="+$("input[name='form[cp2]']").val(),
            data: { q: request.term },
            dataType: "json",
            success: function (data) {
              coordoneesArrive[0] =data.features[0].geometry.coordinates[1];
              coordoneesArrive[1] =data.features[0].geometry.coordinates[0];
              console.log(coordoneesArrive);  
              response($.map(data.features, function (item) {
                return { label: item.properties.name, value: item.properties.name};
              }));
            }
          });
        }
      });

      $.ajax({
        method:"POST",
        url:connexion,
        contentType: "application/json",
        data: JSON.stringify({
          depart: coordoneesDepart,
          arrive: coordoneesArrive,
        }), 
      })

  }); 

вот мой контроллер

/**
     * @Route("/connexion", name="app_login")
     */
    public function login(Request $request, AuthenticationUtils $authenticationUtils,  SessionInterface $session,  EntityManagerInterface $entityManager): Response
    { 
        $user=$this->getUser();
        $form = $this->createForm(LoginType::class);
        $trajet = $session->get('trajet');
        $depart = $request->request->get('depart');
        dump($depart);
        // if ($this->getUser()) {
        //     return $this->redirectToRoute('target_path');
        // }

        // get the login error if there is one
        $error = $authenticationUtils->getLastAuthenticationError();
        // last username entered by the user
        $lastUsername = $authenticationUtils->getLastUsername();

        if($user!==NULL){
            $id=$user->getId(); 
            $trajet->setUserId($id);
            $entityManager->persist($trajet);
            $entityManager->flush();
        }
        dump($trajet);


        return $this->render('security/login.html.twig', [
        'last_username' => $lastUsername,
         'error' => $error,
         'form' => $form->createView(), 
         ]);
    }

1 Ответ

0 голосов
/ 23 апреля 2020

Похоже, что вы отправляете json данные, затем вы можете получить их, выполнив:
$data = file_get_contents('php://input');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...