DI a akcie
Fasáda je odporúčaná voľba, nie jediná cesta. Každá metóda fasády je metódou RoundlyConsulting\SafeFetch\SafeFetchManager — koreňa fasády, singletonu v kontajneri — a každá si cez kontajner vytvorí jednu akciu, takže platí prepísanie akcie v kontajneri aj SafeFetch::fake(). Všetky tri štýly spúšťajú ten istý kód:
// Facade / macro
Http::safe()->withToken($token)->post($url, $payload);
$vetted = SafeFetch::vet($url);
$page = SafeFetch::fetch($url, maxBytes: 1_000_000);
$file = SafeFetch::download($url, $path, maxBytes: 50_000_000);
SafeFetch::precheck($url);
// Dependency injection
public function __construct(private SafeFetchManager $safeFetch) {}
$this->safeFetch->guard(Http::withToken($token), $policy)->post($url, $payload);
$this->safeFetch->vet($url);
$this->safeFetch->download($url, $path, maxBytes: 50_000_000);
$this->safeFetch->precheck($url);
// The actions
app(GuardRequestAction::class)->execute(Http::withToken($token), SafeFetch::policy())->post($url, $payload);
app(VetDestinationAction::class)->execute($url, SafeFetch::policy());
app(FetchUrlAction::class)->execute($url, new FetchOptions(maxBytes: 1_000_000), SafeFetch::policy());
app(DownloadUrlAction::class)->execute($url, $path, new FetchOptions(maxBytes: 50_000_000), SafeFetch::policy());
app(PrecheckDestinationAction::class)->execute($url, SafeFetch::policy());Injektovanie manažéra
use Illuminate\Support\Facades\Http;
use RoundlyConsulting\SafeFetch\SafeFetchManager;
final class SendWebhook
{
public function __construct(private SafeFetchManager $safeFetch) {}
public function handle(string $url, array $payload): void
{
$this->safeFetch->guard(Http::timeout(10))->post($url, $payload);
}
}Manažér zámerne nie je final — fake z neho dedí, takže kód, ktorý injektuje SafeFetchManager, je pri SafeFetch::fake() tiež nahradený.
Volanie akcie
use RoundlyConsulting\SafeFetch\Actions\FetchUrlAction;
use RoundlyConsulting\SafeFetch\DataTransferObjects\FetchOptions;
use RoundlyConsulting\SafeFetch\Facades\SafeFetch;
$page = app(FetchUrlAction::class)->execute(
$url,
new FetchOptions(maxBytes: 1_000_000, timeout: 20, accept: 'text/html'),
SafeFetch::policy(),
);Metóda fasády → akcia
Menné priestory sú relatívne k RoundlyConsulting\SafeFetch\Actions; každá akcia je určená pre aplikáciu:
| Metóda fasády | Akcia | execute() |
|---|---|---|
vet() · allows() | VetDestinationAction | (string $url, DestinationPolicy $policy, string $via = 'vet'): VettedDestination |
precheck() | PrecheckDestinationAction | (string $url, DestinationPolicy $policy): CanonicalUrl |
http() · guard() · Http::safe() | GuardRequestAction | (PendingRequest $request, DestinationPolicy $policy): PendingRequest |
fetch() | FetchUrlAction | (string $url, FetchOptions $options, DestinationPolicy $policy): FetchedResponse |
download() | DownloadUrlAction | (string $url, string $path, FetchOptions $options, DestinationPolicy $policy): DownloadedFile |
truncated() · policy() · networks() · urls() | — | Bez akcie — bezstavový výpočet priamo v manažéri. |
- VetDestinationAction pri každom odmietnutí vyvolá DestinationRefused s $via nastaveným na vet, allows, request, fetch alebo download; PrecheckDestinationAction ho vyvolá s via precheck.
- fetch() a download() zostavujú požiadavku z továrne HTTP klienta v kontajneri, takže na ňu odpovie a zaznamená ju Http::fake(), a chránia ju rovnako ako Http::safe().
- Fake zaznamenáva volania cez manažéra. Priame volanie akcie sa nezaznamená ako vet, fetch ani download — každý krok chránenej požiadavky však áno, pretože ochrana overuje každý krok cez manažéra.
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.