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á 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ádyAkciaexecute()
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 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.