NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Po nastavení kľúča balík funguje bez ďalšej konfigurácie — každá hodnota má predvolenú hodnotu a väčšina sa dá nastaviť cez env. Publikovaný config/google-places.php:

return [
    'key' => env('GOOGLE_PLACES_API_KEY'),

    'hosts' => [
        'places' => env('GOOGLE_PLACES_HOST', 'https://places.googleapis.com/v1'),
        'routes' => env('GOOGLE_ROUTES_HOST', 'https://routes.googleapis.com'),
        'geocoding' => env('GOOGLE_GEOCODING_HOST', 'https://maps.googleapis.com/maps/api'),
    ],

    'field_masks' => [
        'details' => 'id,displayName,formattedAddress,location,viewport,types,regularOpeningHours,photos',
        'autocomplete' => 'suggestions.placePrediction.placeId,suggestions.placePrediction.text,suggestions.placePrediction.structuredFormat,suggestions.placePrediction.types',
        'search' => 'places.id,places.displayName,places.formattedAddress,places.location,places.viewport,places.types,places.regularOpeningHours,places.photos',
        'routes' => 'originIndex,destinationIndex,distanceMeters,duration,condition,status',
    ],

    'http' => [
        'timeout' => env('GOOGLE_PLACES_TIMEOUT', 10),
        'connect_timeout' => env('GOOGLE_PLACES_CONNECT_TIMEOUT', 5),
        'retries' => env('GOOGLE_PLACES_RETRIES', 2),
        'retry_delay' => env('GOOGLE_PLACES_RETRY_DELAY', 200),
    ],

    'cache' => [
        'enabled' => env('GOOGLE_PLACES_CACHE', false),
        'store' => env('GOOGLE_PLACES_CACHE_STORE'),
        'ttl' => env('GOOGLE_PLACES_CACHE_TTL', 86400),
    ],

    'pagination' => [
        'max_pages' => env('GOOGLE_PLACES_MAX_PAGES', 5),
    ],

    'logging' => [
        'enabled' => env('GOOGLE_PLACES_LOGGING', false),
        'channel' => env('GOOGLE_PLACES_LOG_CHANNEL'),
    ],

    'rate_limits' => [
        'owner' => env('GOOGLE_PLACES_RATELIMIT_OWNER', 'app'),

        'places' => [
            'enabled' => env('GOOGLE_PLACES_PLACES_RATELIMIT_ENABLED', true),
            'limit' => env('GOOGLE_PLACES_PLACES_RATELIMIT', 600),
            'per' => env('GOOGLE_PLACES_PLACES_RATELIMIT_PER', 'minute'),
            'adaptive' => env('GOOGLE_PLACES_PLACES_RATELIMIT_ADAPTIVE', true),
            'max_wait' => env('GOOGLE_PLACES_PLACES_RATELIMIT_MAX_WAIT'),
            'jitter' => env('GOOGLE_PLACES_PLACES_RATELIMIT_JITTER'),
        ],

        // 'routes' => [...] and 'geocoding' => [...] — same keys, own env prefix
    ],
];

Všetky kľúče

Každá hodnota sa číta striktne: kľúč, ktorý nie je nastavený, dostane predvolenú hodnotu a čokoľvek neplatné vyhodí RoundlyConsulting\PackageToolkit\Exceptions\InvalidConfigurationException s názvom kľúča — nikdy sa potichu nepoužije náhradná hodnota. Prázdna hodnota znamená nenastavené: chýbajúci kľúč, null aj prázdna hodnota (riadok KEY= v hostiteľskej aplikácii, prázdny alebo len s medzerami) dostanú predvolenú hodnotu.

  • Prepínač typu bool prijme true/false, 1/0, on/off alebo yes/no — z .env aj z publikovaného súboru.
  • Celé číslo (int) prijme celé číslo alebo celočíselný reťazec ('30'). 'five', '5.5', '5s' alebo hodnota mimo rozsahu vyhodí výnimku. Timeouty, cache.ttl, pagination.max_pages a limit rate limitu musia byť aspoň 1; retries, retry_delay, max_wait a jitter aspoň 0.
  • rate_limits.{surface}.per musí byť presne second, minute, hour alebo day.
  • Reťazcové nastavenie — hosts.*, field_masks.*, cache.store, logging.channel, rate_limits.owner — musí byť reťazec. Prázdny host znamená vlastný host Google a prázdny store, kanál či vlastník predvolenú hodnotu. Maska polí predvolenú hodnotu nemá: prázdna vyhodí výnimku „required but missing“.
KľúčPredvolenéEnvÚčel
keynullGOOGLE_PLACES_API_KEYAPI kľúč. Posiela sa ako X-Goog-Api-Key (Places/Routes) a key= (Geocoding). Povinný.
hosts.placeshttps://places.googleapis.com/v1GOOGLE_PLACES_HOSTHost Places API (New). Reťazec; prázdna hodnota = nenastavené → vlastný host Google.
hosts.routeshttps://routes.googleapis.comGOOGLE_ROUTES_HOSTHost Routes API (vzdialenosť a čas presunu). Reťazec; prázdna hodnota = nenastavené → vlastný host Google.
hosts.geocodinghttps://maps.googleapis.com/maps/apiGOOGLE_GEOCODING_HOSTHost Geocoding API (spätné aj priame geokódovanie). Reťazec; prázdna hodnota = nenastavené → vlastný host Google.
field_masks.detailspozrite config—X-Goog-FieldMask pre detail miesta. Každá maska musí byť reťazec; maska nemá náhradnú hodnotu, takže prázdna vyhodí výnimku (povinná, no chýba).
field_masks.autocompletepozrite config—X-Goog-FieldMask pre našepkávanie.
field_masks.searchpozrite config—X-Goog-FieldMask pre textové a okolité vyhľadávanie.
field_masks.routespozrite config—X-Goog-FieldMask pre vzdialenosť a maticu trás.
http.timeout10GOOGLE_PLACES_TIMEOUTTimeout požiadavky (sekundy), aspoň 1.
http.connect_timeout5GOOGLE_PLACES_CONNECT_TIMEOUTTimeout pripojenia (sekundy), aspoň 1.
http.retries2GOOGLE_PLACES_RETRIESPočet opakovaní pri zlyhaní spojenia, 0 alebo viac.
http.retry_delay200GOOGLE_PLACES_RETRY_DELAYPauza medzi opakovaniami (ms), 0 alebo viac.
cache.enabledfalseGOOGLE_PLACES_CACHECachovať idempotentné dopyty (detail, geokódovanie, vzdialenosť, matica, vyhľadávanie).
cache.storenullGOOGLE_PLACES_CACHE_STORECache store; nenastavené, null alebo prázdna hodnota = predvolený store. Hodnota, ktorá nie je reťazcom, vyhodí výnimku.
cache.ttl86400GOOGLE_PLACES_CACHE_TTLPlatnosť cache (sekundy), aspoň 1.
pagination.max_pages5GOOGLE_PLACES_MAX_PAGESBezpečnostný strop pre stránkované vyhľadávanie, aspoň 1; pri dosiahnutí sa zaloguje varovanie.
logging.enabledfalseGOOGLE_PLACES_LOGGINGLogovať každú požiadavku (endpoint, stav, trvanie). API kľúč sa nikdy nezaloguje.
logging.channelnullGOOGLE_PLACES_LOG_CHANNELLog kanál; nenastavené, null alebo prázdna hodnota = predvolený kanál. Hodnota, ktorá nie je reťazcom, vyhodí výnimku.
rate_limits.ownerappGOOGLE_PLACES_RATELIMIT_OWNERVlastník limitu, spoločný pre všetky API (google-places:{surface}:{owner}). Reťazec; prázdna hodnota = nenastavené → app.
rate_limits.{surface}.enabledtrueGOOGLE_PLACES_{SURFACE}_RATELIMIT_ENABLEDObmedzovať toto API (places / routes / geocoding); false = bez obmedzenia.
rate_limits.{surface}.limit600GOOGLE_PLACES_{SURFACE}_RATELIMITMax. počet požiadaviek za okno, aspoň 1.
rate_limits.{surface}.perminuteGOOGLE_PLACES_{SURFACE}_RATELIMIT_PEROkno: presne second, minute, hour alebo day; čokoľvek iné vyhodí výnimku.
rate_limits.{surface}.adaptivetrueGOOGLE_PLACES_{SURFACE}_RATELIMIT_ADAPTIVESamoladenie podľa Retry-After z odpovede 429.
rate_limits.{surface}.max_waitnullGOOGLE_PLACES_{SURFACE}_RATELIMIT_MAX_WAITRýchle zlyhanie (ms, 0 alebo viac) namiesto čakania; null alebo prázdna hodnota = čakať.
rate_limits.{surface}.jitternullGOOGLE_PLACES_{SURFACE}_RATELIMIT_JITTERNáhodný rozptyl (ms, 0 alebo viac) pridaný k odloženému volaniu; null alebo prázdna hodnota = žiadny.

Field masky

Places API (New) aj Routes API vyžadujú hlavičku X-Goog-FieldMask so zoznamom vrátených polí — požiadavka bez nej skončí chybou. Predvolené masky sú striedme; orežte ich, aby ste platili len za polia, ktoré používate, alebo ich rozšírte, keď potrebujete viac. Napríklad typované komponenty adresy pri mieste vyžadujú addressComponents v maske pre detail:

// config/google-places.php — add addressComponents so Place::components() is populated
'field_masks' => [
    'details' => 'id,displayName,formattedAddress,location,viewport,types,regularOpeningHours,photos,addressComponents',
    // ...
],

Jednotlivá požiadavka na detail môže masku prepísať aj bez zásahu do konfigurácie — pozrite Detail miesta.

Hosty

Každý produkt Google má vlastný host. Prepíšte ich, len ak Google smerujete cez vlastnú bránu. Spätné aj priame geokódovanie zámerne používa Geocoding API, ktoré sa autentifikuje parametrom key v URL; Places a Routes používajú hlavičku X-Goog-Api-Key.

Prostredie (env)

Bežné prepínače sa riadia cez env, takže konfiguráciu publikujete len zriedka:

GOOGLE_PLACES_API_KEY=your-google-maps-api-key

GOOGLE_PLACES_TIMEOUT=10
GOOGLE_PLACES_CONNECT_TIMEOUT=5
GOOGLE_PLACES_RETRIES=2
GOOGLE_PLACES_RETRY_DELAY=200

GOOGLE_PLACES_CACHE=true
GOOGLE_PLACES_CACHE_TTL=86400

GOOGLE_PLACES_LOGGING=true
GOOGLE_PLACES_LOG_CHANNEL=stack

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 kryptomien

Odoslaní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.