---
title: "Fluentné buildery — Approvals for Laravel | Roundly"
description: "PendingApproval a PendingApprovalRequest v praxi — pripnutie k žiadosti, pomocník approvals(), absolútna expirácia a neúplné buildery."
url: https://roundly-consulting.com/sk/open-source/navody/approvals-for-laravel/fasada-a-builder
language: sk
---

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

[Approvals for Laravel](https://roundly-consulting.com/sk/open-source/navody/approvals-for-laravel.md)

# Fluentné buildery

Approvals::for(), as() a request() vracajú malé buildery, ktoré zbierajú kontext a nič nezapíšu až do terminálneho volania — approve(), reject(), ask(), cancel(), toggle(), close() alebo open(). Každé terminálne volanie prechádza cez ApprovalsManager, takže ho Approvals::fake() zaznamená. Tabuľky metód sú v časti Fasáda Approvals.

## Pripojenie rozhodnutia ku konkrétnej žiadosti

Rozhodnutie sa predvolene pripojí k poslednej otvorenej žiadosti schvaľovaného modelu. within() ho pripne ku konkrétnej žiadosti — tá musí patriť schvaľovanému modelu a byť ešte otvorená, takže rozhodnutie o jednom modeli sa nikdy nezapočíta do žiadosti iného a nič neskončí v už uzavretom kole:

```php
use RoundlyConsulting\Approvals\Facades\Approvals;

$request = Approvals::request($release)->from([$lead, $qa])->open();

Approvals::for($release)->as($lead)->within($request)->because('Ship it')->approve();

Approvals::for($otherRelease)->as($lead)->within($request)->approve();
// InvalidApprovalRequestException — the request belongs to another subject; nothing is written

// …later, once $request has resolved:
Approvals::for($release)->as($qa)->within($request)->reject();
// ClosedApprovalRequestException — its round is over; nothing is written
```

## Pomocník approvals()

Globálny pomocník approvals() vráti ten istý singleton manažér — hodí sa tam, kde uprednostňujete funkciu pred fasádou:

```php
approvals()->for($deployment)->as($user)->approve();   // the same manager as the facade

Approvals::as($user)->for($deployment)->approve();     // start from either side
```

## Absolútna expirácia

expiresIn() prijíma počet sekúnd od teraz; expiringAt() ľubovoľnú inštanciu Carbon. Obe má builder rozhodnutia, builder žiadosti a od verzie 1.2.0 aj builder šablóny workflow:

```php
use Carbon\CarbonImmutable;
use RoundlyConsulting\Approvals\Facades\Approvals;

Approvals::for($budget)->as($cfo)
    ->because('Within the quarterly limit')
    ->expiringAt(CarbonImmutable::parse('2026-12-31 23:59'))
    ->approve();
```

## Neúplný builder

Terminálne metódy rozhodnutia potrebujú aktéra aj schvaľovaný model. Ak niektorý chýba, vznikne IncompletePendingApprovalException; hasPending() a close() potrebujú len schvaľovaný model — a close() aktéra odmietne:

```php
use RoundlyConsulting\Approvals\Facades\Approvals;

Approvals::for($deployment)->approve();
// IncompletePendingApprovalException: No actor was set on the pending approval. Call as() first.
```

## Nastavenia, ktoré volanie nevyužije

Každý setter niečo uloží, no nie každá terminálna metóda to má kam zapísať. Namiesto toho, aby nastavenie potichu zahodila, terminálna metóda, ktorá ho nevyužije, vyhodí InvalidApprovalRequestException ešte pred zápisom — takže ani Approvals::fake() nič nezaznamená:

| Volanie | Prijme | Odmietne |
| --- | --- | --- |
| `approve()` | because(), weight(), expiráciu, within() | nič |
| `reject()` | because(), weight(), within() | expiráciu (expiryOnReject) — zamietnutie platí, kým ho nestiahnete alebo nenahradíte; keď sa má prestať počítať, stiahnite ho cez cancel() |
| `ask()` | because() (dôvod vyžiadania), expiráciu (termín na odpoveď), within() | weight() (weightOnAsk) — čakajúce rozhodnutie sa do žiadneho prahu nepočíta; váhu nastavte pri approve() či reject(), ktoré na vyžiadanie odpovedá |
| `cancel()` | because() (dôvod stiahnutia), within() | weight() a expiráciu (settingsOnCancel, vymenuje každé nastavené) — stiahnutie nezapisuje žiadne rozhodnutie |
| `close()` | within() (len to kolo) | because() (reasonOnClose) — prečo ste kolo uzavreli, si uložte na vlastný model; ďalej as(), weight() a expiráciu (settingsOnClose) — uzavretie nezapisuje rozhodnutie, nemá aktéra a nespúšťa kontrolu cez Gate |
| `toggle()` | zapnutie: ako approve(); vypnutie: because(), ako cancel() | nič — vypnutie weight() a expiráciu ignoruje, lebo to isté volanie môže ísť oboma smermi |

```php
use RoundlyConsulting\Approvals\Facades\Approvals;

// Taken: an ask's reason and its reply-by deadline
Approvals::for($post)->as($reviewer)->because('Check the sources')->expiresIn(86400)->ask();

// Refused with InvalidApprovalRequestException — nothing is written
Approvals::for($post)->as($reviewer)->weight(2)->ask();            // weightOnAsk: set the weight on the answer
Approvals::for($post)->as($reviewer)->expiresIn(3600)->reject();   // expiryOnReject: a rejection has no expiry
Approvals::for($post)->as($reviewer)->weight(2)->cancel();         // settingsOnCancel: a withdrawal records no decision
Approvals::for($purchase)->because('Withdrawn')->close();          // reasonOnClose: a round keeps no reason
Approvals::for($purchase)->as($admin)->close();                    // settingsOnClose: closing involves no actor
```

because() sa kontroluje prvé, takže close() s dôvodom aj ďalšími nastaveniami vyhodí reasonOnClose; aktér a schvaľovaný model buildera sa kontrolujú ešte skôr (IncompletePendingApprovalException). because(null) žiadny dôvod nenastaví a volanie bez nastavení funguje ako vždy. Tieto odmietnutia pribudli vo verzii 1.2.2 (váha pri ask(), dôvod pri close()) a 1.2.3 (ostatné) — predtým sa nastavenia potichu zahodili, takže kód, ktorý niektoré z nich nastavoval, teraz dostane výnimku: nastavenie, ktoré sa aj tak nikdy neuplatnilo, odstráňte.

## 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/approvals-for-laravel.md)
