Поэтому я хочу вызвать контроллер в Symfony, передав свой маршрут, объявленный в rout.yaml, с помощью функции выборки jquery, и я хочу передать переменные из jquery в контроллер. Как я могу это сделать ?

Вот мой JQuery. Я называю этот маршрут и хочу передать ему две переменные сверху.

var longitudde = lonLat[0];
var latudde = lonLat[1];
fetch('/weather_request)
.then(function(response) {
  return response.json();
}).then(function(json) {
  // ...
});

Чтобы передать эти переменные вways.yaml в Symfony:

weather_request:
    path:     /weather_request
    controller: App\Controller\WeatherController::weather
    methods: [get]
    defaults:
      longitude: longitude
      latitude: latitude

Чтобы окончательно передать их в функцию погоды в Weather Controller:

public function weather($longitude, $latitude)
{
    return $this->render('weather/index.html.twig', ['weatherInfos' => $this->weatherService->getWeather($longitude, $latitude)]);
}

Так как же я могу передать долготу и широту от jquery fetch к контроллеру здесь? Я новичок в Symfony, поэтому могу ошибаться.

0
KroBlan

2 ответа

для меня я использую это так: в Js:

const obj = {
"longitudde":lonLat[0],
"latudde":lonLat[1]
}

fetch('/weather_request', 
{
     method:'POST',
         headers: { 
            'Content-Type':'application/json'
     },
     body:JSON.stringify(obj)
 }).then(resp => {
         return resp.json();
 }).then(res => {
         console.log(res)      
     //...
})
}

В аннотации маршрута Controller, но вы можете использовать с Route.yaml:

use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;

/**
* @Route("/weather_request", methods={"POST"})
*
*/
public function weather(Request $request)
{
    $data = json_decode($request->getContent());
    $longitude = $data->longitudde;
    $latitude = $data->latudde;
    return $this->render('weather/index.html.twig', 
    [
        'weatherInfos' => $this->weatherService
                          ->getWeather($longitude, $latitude)
    ]);   
}

Я думаю, это может помочь вам:

  $.ajax({
  url: '{{path('weather_request')}}',
  type: 'GET',
  data: { 
  longitude: lonLat[0], 
  latutide: lonLat[1], 
  },
  success: function(response) {
    //called when successful
  },
  error: function(e) {
    //called when there is an error
    //console.log(e.message);
  }
});

В вашем контроллере:

use Symfony\Component\HttpFoundation\Request;

public function weather(Request $request)
{
  if ($request->isXMLHttpRequest()) {         
   $longitude = $request->query->get('longitude');
   $latutide  =  $request->query->get('latutide');
 }

}
58566828