Bez fasády
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óda | Vracia | Poznámka |
|---|---|---|
details(DetailsQuery|string) | ?Place | Jedno 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) | PlacesSession | Billing 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) | SearchPaginator | Sám nasleduje nextPageToken. |
nearbySearchPaginated(NearbySearchQuery) | SearchPaginator | Rovnaký paginátor nad okolitým vyhľadávaním (jedna stránka). |
findPlace(string, ?Location) | ?Place | Najlepš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|MultipleDistances | Vzdialenosť a čas presunu cez Routes API — samostatná cesta do každého cieľa. |
matrix(array $origins, array $destinations) | PendingMatrix | Fluentný builder matice — driving(), walking(), bicycling(), transit(). |
computeMatrix(MatrixQuery) | DistanceMatrix | Plná matica štartov × cieľov. |
photo(string, int = 1600, int = 1600) | PendingPhoto | Handle fotografie — url(), contents(), save(). |
photoUri(string, int = 1600, int = 1600) | string | URL média bez kľúča, jedna požiadavka. |
photoContents(string, int = 1600, int = 1600) | string | Surové bajty obrázka, jedna požiadavka. |
photoUrl(string, int = 1600, int = 1600) | string | URL 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() | GooglePlacesFake | Len 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 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.