DI a akcie
Fasáda je odporúčaná voľba, nie jediná cesta. Balík má tri rovnocenné vstupné body:
- Fasáda Geolocation — najkratší zápis.
- Manažér RoundlyConsulting\Geolocation\GeolocationManager — koreň fasády, singleton v kontajneri (aj pod aliasom geolocation). Injektujte ho cez konštruktor a dostanete rovnaké API ako explicitnú závislosť, bez statických volaní.
- Akcie — jednoúčelové triedy s metódou execute(), ktoré skladáte do vlastných jobov a príkazov. Tu je presne jedna.
Injektovanie manažéra
use Illuminate\Http\Request;
use RoundlyConsulting\Geolocation\GeolocationManager;
final class CheckoutController
{
public function __construct(private GeolocationManager $geolocation) {}
public function __invoke(Request $request)
{
$location = $this->geolocation->locateRequest($request);
$distance = $location === null
? null
: $this->geolocation->distanceBetween($this->warehouse(), $location->coordinates());
// ...
}
}Geolocation::fake() nahradí koreň fasády aj väzbu v kontajneri, takže fake dostane aj injektovaný manažér a $request->location().
Jediná akcia
Jediný prípad, ktorý mení stav — obnovu databázy MaxMind —, môžete spustiť aj priamo ako akciu, napríklad z vlastného naplánovaného jobu:
use RoundlyConsulting\Geolocation\Actions\UpdateDatabaseAction;
$path = app(UpdateDatabaseAction::class)->execute(edition: 'GeoLite2-City');| Akcia | Metóda fasády |
|---|---|
UpdateDatabaseAction | updateDatabase(?$edition, ?$path) |
Vyhľadávania a vzdialenosti nemajú triedy akcií: prechádzajú pipeline poskytovateľov a každý poskytovateľ je klient vzdialeného API, ktorého vymeníte v mape providers (pozri Vlastní poskytovatelia). Priame volanie akcie obíde manažér, preto ho Geolocation::fake() nezaznamená — ak má test obnovu vidieť, použite updateDatabase().
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.