Fasáda Geolocation
Odporúčaným vstupným bodom je fasáda Geolocation. Registruje sa automaticky (globálny alias Geolocation) a stojí za ňou GeolocationManager, takže každé volanie nižšie funguje aj na injektovanom manažéri — pozri DI a akcie. Celý rozsah fasády:
use RoundlyConsulting\Geolocation\DataTransferObjects\Coordinates;
use RoundlyConsulting\Geolocation\DataTransferObjects\DistanceQuery;
use RoundlyConsulting\Geolocation\DataTransferObjects\GeolocationQuery;
use RoundlyConsulting\Geolocation\Enum\DistanceType;
use RoundlyConsulting\Geolocation\Facades\Geolocation;
// Locate
Geolocation::locateIp('8.8.8.8'); // ?Location
Geolocation::locateRequest(); // the client IP of the current request
Geolocation::locateAddress('1600 Amphitheatre Pkwy, Mountain View');
Geolocation::locateCoordinates(new Coordinates(48.1486, 17.1077));
Geolocation::locate(GeolocationQuery::forIp('8.8.8.8'));
Geolocation::batch(['8.8.8.8', '1.1.1.1']); // array<string, ?Location>
// Measure
Geolocation::distanceBetween($from, $to); // ?Distance — driving by default
Geolocation::distance(DistanceQuery::between($from, $to, DistanceType::Walking));
Geolocation::distanceMatrix([$warehouse], [$a, $b]); // DistanceMatrix
// Scoped copies — they apply to the call they are chained to, nothing else
Geolocation::provider('ipinfo')->locateIp('8.8.8.8');
Geolocation::using('maxmind_database', 'ipinfo')->locateIp('8.8.8.8');
Geolocation::withToken('ipinfo', 'runtime-token')->locateIp('8.8.8.8');
Geolocation::withTimeout(10)->locateIp('8.8.8.8');
// Maintain
Geolocation::updateDatabase(); // refresh the MaxMind .mmdb, returns the path
Geolocation::forget(GeolocationQuery::forIp('8.8.8.8')); // drop one cached result
Geolocation::flushCache(); // drop every cached lookup and distance
Geolocation::extend('my_provider', fn () => new MyProvider());Prehľad metód
| Metóda | Vracia | Účel |
|---|---|---|
locateIp($ip) / locateAddress($address) | ?Location | Nájde polohu IP adresy alebo ulice. |
locateCoordinates($coordinates) | ?Location | Spätné geokódovanie hodnoty Coordinates. |
locateRequest(?$request) | ?Location | IP klienta z aktuálneho (alebo zadaného) requestu; bez IP null. |
locate($query) | ?Location | Vyhodnotí ľubovoľný GeolocationQuery. |
batch($ips) | array<string, ?Location> | Viac IP naraz; chyby sa zmenia na null pre danú položku. |
distance($query) | ?Distance | Vzdialenosť cesty pre DistanceQuery. |
distanceBetween($from, $to, $type) | ?Distance | distance() bez skladania dotazu; predvolene Driving. |
distanceMatrix($origins, $destinations, $type) | DistanceMatrix | Mriežka východísk × cieľov jedným volaním. |
updateDatabase(?$edition, ?$path) | string | Stiahne alebo obnoví .mmdb MaxMind; vráti zapísanú cestu. |
forget($query) | bool | Odstráni jeden výsledok z cache. |
flushCache() | void | Zneplatní všetky výsledky v cache. |
provider($name) / using(...$names) | GeolocationManager | Kópia manažéra, ktorá sa pýta len vybraných poskytovateľov. |
withToken($provider, $token) | GeolocationManager | Kópia manažéra, ktorá pošle token alebo kľúč len danému poskytovateľovi. |
withConfig($provider, $overrides) | GeolocationManager | Kópia manažéra s prepísanou konfiguráciou len pre daného poskytovateľa. |
withTimeout($seconds) | GeolocationManager | Kópia manažéra s týmto HTTP timeoutom pre všetkých poskytovateľov. |
extend($name, $factory) | GeolocationManager | Zaregistruje poskytovateľa ako closure pre pipeline. |
fake(array $results = []) | GeolocationFake | Vymení manažér za zaznamenávajúci fake — pozri Testovanie. |
locate(), distance() a distanceBetween() vrátia null, keď dotaz nevyrieši žiadny poskytovateľ, aj keď sú všetci nedostupní. provider(), using() a prepísania with*() vracajú kópiu manažéra s obmedzeným rozsahom: platí presne tak dlho ako reťazec volaní, ku ktorému ju pripojíte, a zdieľaný manažér sa nikdy nezmení. GeolocationManager je navyše Macroable — pozri Nastavenia pre jedno volanie.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.