Changelog
phil/geo-bundleAll notable changes to phil/geo-bundle will be documented in this file.
Updates should follow the Keep a CHANGELOG principles.
0.1.0-alpha - 2026-11-11
Added
Coordinatesas a Doctrine embeddable,config/doctrine/Coordinates.orm.xml.PhilGeoBundle, extension aliasphil_geo(doctrine_mapping).- Geocoding:
phil_geo.geocoding—providers(nominatim,google_maps,opencage,here,mapbox,azure_maps,adresses_quebec,photon,nrcan), their options and acache— andphil_geo.ip_locator.ipstack, whosebase_urldefaults tohttps://api.ipstack.com;GeocodingServicesregisters the providers, the chain, the cache,GeocoderandIpLocatoronhttp_client. The keys are required foropencage,here,mapboxandazure_maps;phil_geo.geocoding.photon(base_url,limit,languages) needs no key, norphil_geo.geocoding.nrcan(base_url,limit), Natural Resources Canada. The configuration refuses acache.poolwhen the providers includemapboxwithoutpermanent, whose terms forbid keeping its temporary answers. phil_geo.ip_locator.maxmind(database,locale): a MaxMind city database on the server as theIpLocator, before ipstack;Databaseautowired.CoordinatesTypeandCoordinatesTransformer.GeoExtension:geo_distance(),format_distance,geo_attributes(), and the Twig functiongeo_schema: schema.org data for JSON-LD.format_distancebuilds one number formatter per locale and keeps those of 64 locales at most, and rounds before choosing the unit: 999.6 m is1 km.- The Stimulus controller
distance-sortand its moduledistance.js, inassets/;formatDistance()rounds before choosing the unit and reads a Symfony locale such asfr_CAasfr-CA. phil:geo:maxmind:updateandDatabaseUpdater: the latest MaxMind database downloaded with the account (account_id,license_key,edition,download_url), checked against its SHA-256, read out of its archive and renamed over the old one; nothing downloaded when it is already the latest. Both are registered only withaccount_idandlicense_key, so a database that is only read needs nohttp_client; the account takes both settings, and adatabase, or the configuration is refused.DatabaseUpdaterholds a lock on<database>.lockand writes its archive and extracted file under names of their own, so two runs never remove or read each other's files; the second fails at once. Its licence key is#[SensitiveParameter].- The documentation in
doc/, one file per topic, indexed by the README. CONTRIBUTING.md,SECURITY.mdandCODE_OF_CONDUCT.md.