- Classe :
AppoloDev\SFToolboxBundle\Utils\GeocompleteUtils - Fichier source :
src/Utils/GeocompleteUtils.php
Classe utilitaire (méthode statique unique) qui parse le JSON produit par un widget de géocomplétion façon Google Places Autocomplete, et le transforme en tableau associatif simple, directement exploitable pour renseigner les champs du concern Geolocalizable. Utilisé en interne par Form/Subscriber/GeolocalizableSubscriber et Form/Validator/GeolocalizableConstraint.
Parse $geocompleteJson (attend la forme { formattedAddress, location: { lat, lng }, addressComponents: [{ types: [], longText }] }, typique de l'API Google Places) et retourne un tableau avec les clés :
formattedAddress(string,''si absent)lat(float|int,0si absent)lng(float|int,0si absent)city— présent uniquement si un composant d'adresse a le typelocalityzipCode— présent uniquement si un composant d'adresse a le typepostal_codecountry— présent uniquement si un composant d'adresse a le typecountry
Retourne un tableau vide si $geocompleteJson n'est pas un JSON valide (json_decode retourne null).
use AppoloDev\SFToolboxBundle\Utils\GeocompleteUtils;
$json = '{
"formattedAddress": "10 Rue de Rivoli, 75004 Paris, France",
"location": {"lat": 48.8556, "lng": 2.3522},
"addressComponents": [
{"types": ["locality"], "longText": "Paris"},
{"types": ["postal_code"], "longText": "75004"},
{"types": ["country"], "longText": "France"}
]
}';
GeocompleteUtils::transformGeocompleteData($json);
// [
// 'formattedAddress' => '10 Rue de Rivoli, 75004 Paris, France',
// 'lat' => 48.8556,
// 'lng' => 2.3522,
// 'city' => 'Paris',
// 'zipCode' => '75004',
// 'country' => 'France',
// ]
⚠️ Le widget JS doit produire un JSON respectant exactement cette forme (addressComponents[].types/longText,location.lat/lng) — un format différent (ex: l'ancienne API Google Placesaddress_components/long_name) ne sera pas reconnu correctement.
- Domain/Entity/Concern/Geolocalizable — champs alimentés par ce parseur.
- Form/Subscriber/GeolocalizableSubscriber — utilisateur principal.
- Form/Validator/GeolocalizableConstraint — utilise aussi ce parseur pour valider les champs requis.