Chybové odpovede poskytovateľov ani nedostupné API vyhľadávanie neukončia — počítajú sa ako minutie a pipeline pokračuje. Balík vyhadzuje výnimky pri problémoch s konfiguráciou (neznámy poskytovateľ, chýbajúca či poškodená databáza MaxMind), neplatnom vstupe, neúspešnej obnove databázy a voliteľnom strope limitu požiadaviek. Všetky sú v RoundlyConsulting\Geolocation\Exceptions:
| Výnimka | Kedy sa vyhodí |
|---|---|
GeolocationException | Abstraktný základ (RuntimeException) — zachytením ošetríte všetko nižšie. |
UnknownProviderException | Meno v using(), provider(), withToken() alebo withConfig() nie je v mape providers ani registrované cez extend(), alebo položka v providers nemá meno. |
ProviderUnavailableException | Pribalený HTTP poskytovateľ sa nedostane k svojmu API (timeout, zlyhanie DNS, odmietnuté spojenie). Manažér ju zachytí a opýta sa ďalšieho poskytovateľa; uvidíte ju ako error v LocationResolutionFailed. Nesie ->provider; správa neobsahuje prístupové údaje. |
DatabaseUpdateException | updateDatabase() alebo geolocation:db:update nemá licenčný kľúč či cestu, sťahovanie zlyhá (chyba HTTP, timeout, nedostupný server) alebo sa archív nedá rozbaliť. Licenčný kľúč sa zo správy odstráni. |
InvalidCoordinatesException | Šírka mimo [-90, 90], dĺžka mimo [-180, 180] alebo iná hodnota ako Coordinates priradená castu. |
DatabaseNotFoundException | Poskytovateľ databázy MaxMind je zapnutý, ale súbor .mmdb chýba, nedá sa čítať alebo nie je nastavená cesta. |
InvalidDatabaseException | Súbor .mmdb je poškodený — chýbajú metadáta, je skrátený, chybný alebo má nepodporovanú veľkosť záznamu. |
RateLimitExceededException | Limiter poskytovateľa by čakal dlhšie ako max_wait. Nesie ->provider a ->retryAfterSeconds(). |
Chybná hodnota v konfigurácii — preklep v prepínači, timeout, ktorý nie je celé číslo, neznáme okno limitu — namiesto toho vyhodí InvalidConfigurationException z package-toolkit (RoundlyConsulting\PackageToolkit\Exceptions) s názvom kľúča. Nie je to GeolocationException, takže zachytenie GeolocationException nesprávnu konfiguráciu nikdy neskryje.
Zlyhanie spojenia
Keď poskytovateľ vôbec nie je dostupný — timeout, zlyhanie DNS, odmietnuté spojenie —, HTTP klient Laravelu zopakuje pokus podľa nastavení poskytovateľa, potom poskytovateľ vyhodí ProviderUnavailableException a manažér prejde na ďalšieho poskytovateľa. Ak neodpovie nikto, vyhľadávanie vráti null a LocationResolutionFailed uvedie posledného nedostupného poskytovateľa a jeho chybu. distance() nedostupného poskytovateľa preskočí rovnako a distanceMatrix() zmení každú bunku na null.
API kľúče ani licenčný kľúč MaxMind sa v správach výnimiek nikdy neobjavia: sú odstránené a výnimka prenosu — jej správa cituje celú URL požiadavky — sa nepripája ako previous.
Zachyťte GeolocationException a ošetríte všetko na jednom mieste:
use RoundlyConsulting\Geolocation\Exceptions\GeolocationException;
try {
$location = Geolocation::locateRequest();
} catch (GeolocationException $e) {
report($e); // missing or corrupt .mmdb, rate-limit ceiling, unknown provider...
$location = null;
}batch() výnimky zachytáva sám po položkách a pre danú IP ich mení na null.
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.