---
title: "DI a akcie — Safe Fetch for Laravel | Roundly"
description: "Bez fasády: injektujte SafeFetchManager alebo zavolajte jednoúčelovú akciu — každá akcia so signatúrou execute() a metódou fasády."
url: https://roundly-consulting.com/sk/open-source/navody/safe-fetch-for-laravel/bez-fasady
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Safe Fetch for Laravel](https://roundly-consulting.com/sk/open-source/navody/safe-fetch-for-laravel.md)

# 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:

```php
// 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

```php
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

```php
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 kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/safe-fetch-for-laravel.md)
