1

I have Google maps and a rectangle highlighting some area on top of the map. NorthEast and Southwest latitudes of that rectangle are stored as javascript variables(ne,sw).I want to send those parameters to a php controller on button click, like this:

View

How can I do that? I d'ont have knowledge of AJAX nor JQuery.

{% extends 'base.html.twig' %}

{% block body %}

var ne;
var sw;

<a href="/highlighted/{{something}}" class="btn btn-success">View</a>
<div id="map" style="width:100%;height:500px"></div>


<script language="javascript" type="text/javascript">
function myMap() {
map = new google.maps.Map(document.getElementById('map'), {          center: {lat: 6.911918, lng: 79.892780},
    zoom: 9
  });

  var bounds = {
    north: 7.011918,
    south: 6.811918,
    east:  79.992780,
    west:  79.792780
  };

  // Define the rectangle and set its editable property to true.
  rectangle = new google.maps.Rectangle({
    bounds: bounds,
    editable: true,
    draggable: true
  });

  rectangle.setMap(map);
  // Add an event listener on the rectangle.
  rectangle.addListener('bounds_changed', showNewRect);

  // Define an info window on the map.
  infoWindow = new google.maps.InfoWindow();
}

// Show the new coordinates for the rectangle in an info window.

/** @this {google.maps.Rectangle} */
function showNewRect(event) {
  var ne = rectangle.getBounds().getNorthEast();
  var sw = rectangle.getBounds().getSouthWest();

  map.northLatitude=2.33;

  var contentString = '<b>Rectangle moved.</b><br>' +
      'New north-east corner: ' + ne.lat() + ', ' + ne.lng() + '<br>' +
      'New south-west corner: ' + sw.lat() + ', ' + sw.lng();

  // Set the info window's content and position.
  infoWindow.setContent(contentString);
  infoWindow.setPosition(ne);

  infoWindow.open(map);

    //window.location.href = "Controller/SatelliteImages_Controller.php?w1=" + ne + "&w2=" + sw;
    return (ne+sw);
}

</script>

<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyALi1Ro_johRtFp2JrLa9zGMLTwBMxBrHQ&callback=myMap"></script>

{% endblock %}

Please excuse my bad syntax. I'm new to PHP and Symfony.

0

1 Answer 1

2

Assuming that your code is working you can do this easily with jquery:

<script language="javascript" type="text/javascript">
  $( document ).ready(function() {
    // Your script code here

    function showNewRect(event) {
      // Your code function here

      var neSw = {"data": {"ne": ne, "sw": sw}};
      $.ajax({
         url: 'Controller/SatelliteImages_Controller.php',
         type: "post",
         data: neSw
      })
      .done(function(responseData, status){
        console.log(responseData);
      })
      .fail(function(object, status){
        console.log("Error in Ajax response");
      });
    }  
  });          
</script>

So you send your vars ne sw by POST to your controller. In your controller you can get it by your request object: $request->get('data');

If you want you can send back a response data to the AJAX function to inform all was ok, using Symfony\Component\HttpFoundation\JsonResponse;

In your Symfony controller:

use Symfony\Component\HttpFoundation\JsonResponse;

class YourController extends Controller
{
    public function yourAction() {
        $data = $this->getRequest()->get('data');
        var_dump($data); // Here you can see your vars sent by AJAX
        $dataResponse = array("error" => false); //Here data you can send back
        return new JsonResponse($dataResponse);
    }
}

If you do this you must to configure your jquery AJAX function to receive json data:

    $.ajax({
       url: 'Controller/SatelliteImages_Controller.php',
       type: "post",
       data: neSw,
       dataType: 'json'
    })
Sign up to request clarification or add additional context in comments.

2 Comments

Will give this a try.But how am I gonna call the controller? I want to display the value of neSw variable on a new page when the VIEW button is clicked. Any thoughts?
Then you can pass var values by GET window.location.href = "myaction/" + ne + "/" + sw; and in your controller create your route to receive your vars @Route("/myaction/{ne}/{sw}", name="route_name")

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.