Need Help. How Can I Save Data From GoogleMaps to Database with Symfony 4.2

I’m trying to learn Symfony.
I want to save lat lng information from googlemaps.But I dont know how.

This is index page.

<!DOCTYPE html>
<html>
<head>
    <title>Autocomplete places search box using googlemaps api</title>
    <meta charset="utf-8">
    <link rel="stylesheet" href="css/style.cs">
    <title>Access Google Maps API in PHP</title>
    <link rel="stylesheet" href="{{ asset('assets/home/assets/css/bootstrap.min.css') }}">
    <script type="text/javascript" src="{{ asset('assets/home/assets/js/jquery.easing-1.3.min.js') }}"></script>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
    <style type="text/css">
        .container {
            height: 450px;
        }
        #map {
            width: 100%;
            height: 100%;
            border: 1px solid blue;
        }
        #data{
            display: none;
        }
    </style>

</head>


<body>
<div class="container">
    <script>
        function loadMap() {
            var map = new google.maps.Map(document.getElementById('map'), {
                center: {lat: -33.8688, lng: 151.2195},
                zoom: 13
            });
            var input = document.getElementById('searchInput');
            map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);

            var autocomplete = new google.maps.places.Autocomplete(input);
            autocomplete.bindTo('bounds', map);

            var infowindow = new google.maps.InfoWindow();
            var marker = new google.maps.Marker({
                map: map,
                anchorPoint: new google.maps.Point(0, -29)
            });

            autocomplete.addListener('place_changed', function() {
                infowindow.close();
                marker.setVisible(false);
                var place = autocomplete.getPlace();
                if (!place.geometry) {
                    window.alert("Autocomplete's returned place contains no geometry");
                    return;
                }

                // If the place has a geometry, then present it on a map.
                if (place.geometry.viewport) {
                    map.fitBounds(place.geometry.viewport);
                } else {
                    map.setCenter(place.geometry.location);
                    map.setZoom(17);
                }
                marker.setIcon(({
                    url: place.icon,
                    size: new google.maps.Size(71, 71),
                    origin: new google.maps.Point(0, 0),
                    anchor: new google.maps.Point(17, 34),
                    scaledSize: new google.maps.Size(35, 35)
                }));
                marker.setPosition(place.geometry.location);
                marker.setVisible(true);

                var address = '';
                if (place.address_components) {
                    address = [
                        (place.address_components[0] && place.address_components[0].short_name || ''),
                        (place.address_components[1] && place.address_components[1].short_name || ''),
                        (place.address_components[2] && place.address_components[2].short_name || '')
                    ].join(' ');
                }

                infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address);
                infowindow.open(map, marker);

                // Location details
                for (var i = 0; i < place.address_components.length; i++) {
                    if(place.address_components[i].types[0] == 'postal_code'){
                        document.getElementById('postal_code').innerHTML = place.address_components[i].long_name;
                    }
                    if(place.address_components[i].types[0] == 'country'){
                        document.getElementById('country').innerHTML = place.address_components[i].long_name;
                    }
                }
                document.getElementById('location').innerHTML = place.formatted_address;
                document.getElementById('lat').innerHTML = place.geometry.location.lat();
                document.getElementById('lon').innerHTML = place.geometry.location.lng();
            });
        }
    </script>
    <!-- Search input -->
    <input id="searchInput" class="controls" type="text" placeholder="Enter a location">

    <!-- Google map -->
    <div id="map"></div>

    <!-- Display geolocation data -->
    <ul class="geo-data">
        <li>Full Address: <span id="location"></span></li>
        <li>Postal Code: <span id="postal_code"></span></li>
        <li>Country: <span id="country"></span></li>
        <li>Latitude: <span id="lat"></span></li>
        <li>Longitude: <span id="lon"></span></li>
    </ul>
</div>
<script
        src="https://maps.googleapis.com/maps/api/js?libraries=places&key=    &callback=loadMap">
</script>

</body>
</html>

I can see lat lng information on index page.
And this is Controller.

           <?php

namespace AppController;

use AppEntityShopMaps;
use AppFormShopMapsType;
use AppRepositoryShopMapsRepository;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAnnotationRoute;

/**
 * @Route("/shopmaps")
 */
class ShopMapsController extends AbstractController
{
    /**
     * @Route("/", name="shop_maps_index", methods={"GET"})
     */
    public function index(ShopMapsRepository $shopMapsRepository): Response
    {
        $coll=$shopMapsRepository->getShopMapsBlankLatLng();
        $coll=json_encode($coll, true);
        echo '<div id="data">' . $coll. '</div>';
        //index 2 çağrılırsa haritadan lat lng tespit ediliyor
        //index çağrılırsa haritada konum işasretleniyor
        return $this->render('shop_maps/index2.html.twig', [
            'shopmaps' => $shopMapsRepository->findBy(['lat'=>null]),

        ]);
    }

    /**
     * @Route("/new", name="shop_maps_new", methods={"GET","POST"})
     */
    public function new(Request $request): Response
    {
        $shopMap = new ShopMaps();
        $form = $this->createForm(ShopMapsType::class, $shopMap);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($shopMap);
            $entityManager->flush();

            return $this->redirectToRoute('shop_maps_index');
        }

        return $this->render('shop_maps/new.html.twig', [
            'shop_map' => $shopMap,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/{id}", name="shop_maps_show", methods={"GET"})
     */
    public function show(ShopMaps $shopMap): Response
    {
        return $this->render('shop_maps/show.html.twig', [
            'shop_map' => $shopMap,
        ]);
    }

    /**
     * @Route("/{id}/edit", name="shop_maps_edit", methods={"GET","POST"})
     */
    public function edit(Request $request, ShopMaps $shopMap): Response
    {
        $form = $this->createForm(ShopMapsType::class, $shopMap);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $this->getDoctrine()->getManager()->flush();

            return $this->redirectToRoute('shop_maps_index');
        }

        return $this->render('shop_maps/edit.html.twig', [
            'shop_map' => $shopMap,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/{id}", name="shop_maps_delete", methods={"DELETE"})
     */
    public function delete(Request $request, ShopMaps $shopMap): Response
    {
        if ($this->isCsrfTokenValid('delete'.$shopMap->getId(), $request->request->get('_token'))) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->remove($shopMap);
            $entityManager->flush();
        }

        return $this->redirectToRoute('shop_maps_index');
    }
}

Notice: index method not finished and deleted api key for privacy.
I dont know how can I save this information to my Database.Please hepl me. Thanks.

Source: Symfony Questions

Was this helpful?

0 / 0

Leave a Reply 0

Your email address will not be published. Required fields are marked *