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

Fasáda je odporúčaná predvoľba, nie jediná cesta. Väčšina balíkov ponúka tri rovnocenné vstupné body — fasádu, manažér vložený cez konštruktor a jednoúčelové triedy akcií. google-places je klient vzdialeného API, preto triedy akcií nemá: prípady použitia sú priamo metódy klienta. Zostávajú teda dva:

  • Fasáda GooglePlaces — najkratší zápis.
  • Klient vložený cez konštruktor — rovnaké API s explicitnou závislosťou a bez statických volaní. Koreňom fasády je kontrakt RoundlyConsulting\GooglePlaces\Contracts\PlacesClient, zaregistrovaný ako singleton s implementáciou RoundlyConsulting\GooglePlaces\Places.

Vloženie klienta

Fasáda aj kontrakt vedú na ten istý singleton a GooglePlaces::fake() nahradí oba — v kóde, ktorý chcete v testoch nahradiť, preto typujte kontrakt, nie konkrétnu triedu Places:

use RoundlyConsulting\GooglePlaces\Contracts\PlacesClient;

final class NearbyCafes
{
    public function __construct(private PlacesClient $places) {}

    public function __invoke(string $query): array
    {
        return $this->places->textSearch($query)->all();
    }
}

Handles vytvorené vloženým klientom volajú späť práve tento klient, takže aj ony sa v testoch nahradia:

use RoundlyConsulting\GooglePlaces\Contracts\PlacesClient;

final class PlacePhotos
{
    public function __construct(private PlacesClient $places) {}

    public function hero(string $placeId): ?string
    {
        $place = $this->places->details($placeId);

        if ($place === null || $place->photos === []) {
            return null;
        }

        return $this->places->photo($place->photos[0])->url();
    }
}

Metóda fasády → metóda klienta

Každé volanie fasády zodpovedá presne jednej rovnomennej metóde PlacesClient:

MetódaVraciaPoznámka
details(DetailsQuery|string)?PlaceJedno miesto podľa id; null, keď Google vráti 404.
autocomplete(AutocompleteQuery|string)Collection<AutocompletePrediction>Predikcie miest počas písania. Nikdy sa necachuje.
session(?string $token = null)PlacesSessionBilling session pre našepkávanie — autocomplete(), details(), token(), isFinished().
textSearch(TextSearchQuery|string)Collection<Place>Fulltextové vyhľadávanie, jedna stránka.
nearbySearch(NearbySearchQuery)Collection<Place>Miesta v okruhu okolo bodu.
textSearchPaginated(TextSearchQuery|string)SearchPaginatorSám nasleduje nextPageToken.
nearbySearchPaginated(NearbySearchQuery)SearchPaginatorRovnaký paginátor nad okolitým vyhľadávaním (jedna stránka).
findPlace(string, ?Location)?PlaceNajlepšia zhoda pre frázu, voliteľne s preferovanou polohou.
geocode(ReverseGeocodingQuery|Location|float, ?float)Collection<ReverseGeocodingResult>Súradnice → adresy.
geocodeAddress(GeocodingQuery|string)Collection<ReverseGeocodingResult>Adresa → súradnice.
distance(DistanceQuery)Distance|MultipleDistancesVzdialenosť a čas presunu cez Routes API — samostatná cesta do každého cieľa.
matrix(array $origins, array $destinations)PendingMatrixFluentný builder matice — driving(), walking(), bicycling(), transit().
computeMatrix(MatrixQuery)DistanceMatrixPlná matica štartov × cieľov.
photo(string, int = 1600, int = 1600)PendingPhotoHandle fotografie — url(), contents(), save().
photoUri(string, int = 1600, int = 1600)stringURL média bez kľúča, jedna požiadavka.
photoContents(string, int = 1600, int = 1600)stringSurové bajty obrázka, jedna požiadavka.
photoUrl(string, int = 1600, int = 1600)stringURL média s kľúčom zostavená lokálne, bez požiadavky — len na serveri.
check()list<ApiCheckResult>Je každé Google API s nastaveným kľúčom povolené a dostupné?
GooglePlaces::fake()GooglePlacesFakeLen fasáda — nasadí zaznamenávajúci testovací fake.

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.