---
title: "Fasáda Approvals — Approvals for Laravel | Roundly"
description: "Celá fasáda Approvals — rozhodnutia, žiadosti pre viacerých schvaľovateľov, čítanie, delegovanie a expirácia — so všetkými metódami."
url: https://roundly-consulting.com/sk/open-source/navody/approvals-for-laravel/fasada
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)

# Fasáda Approvals

Všetko ide cez jedno API — fasádu Approvals, injektovateľný ApprovalsManager, ktorý za ňou stojí, alebo akcie, ktoré spúšťa. Všetky tri vykonávajú ten istý kód a odporúčaným vstupným bodom je fasáda. Registruje sa automaticky. Celý rozsah:

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

// One actor's decision on one approvable
Approvals::for($deployment)->as($user)->because('Looks good to me')->approve();
Approvals::for($deployment)->as($user)->because('Please add tests')->reject(); // withdraws the approval above
Approvals::for($deployment)->as($user)->ask();                 // ask the actor: a pending decision
Approvals::for($deployment)->as($user)->cancel();              // withdraw the actor's live decision
Approvals::for($deployment)->as($user)->toggle();              // simple on/off
Approvals::for($deployment)->as($user)->expiresIn(86400)->approve(); // valid for a day
Approvals::for($deployment)->as($user)->weight(3)->approve();  // override the decision's weight
Approvals::for($invoice)->as($user)->within($request)->approve(); // pin to one request
Approvals::for($purchase)->close();                            // your app calls off the open round — no actor

// Reads
Approvals::for($deployment)->as($user)->isApproved();  // bool
Approvals::for($deployment)->as($user)->isRejected();  // bool
Approvals::for($deployment)->hasPending();             // bool — any pending decision

// Multi-approver requests (flat, staged, or from a workflow preset)
Approvals::request($invoice)->from([$a, $b, $c])->quorum(2)->expiresIn(3600)->open();
Approvals::request($release)->stages([...])->continueOnRejection()->expiringAt($t)->open();
Approvals::request($budget)->workflow('payout')->expiresIn(3600)->open([$a, $b, $c]);

Approvals::status($invoice);        // ApprovalStatus of the latest request (Pending when none)
Approvals::progress($invoice);      // ?ApprovalProgress
Approvals::currentStage($release);  // ?ApprovalRequestStage
Approvals::preset('payout');        // WorkflowPreset from config

// Delegation
Approvals::delegations($boss)->to($deputy)->from($monday)->until($friday)->grant();
Approvals::delegations($boss)->revoke($deputy);   // or ->revoke() for all; returns int
Approvals::delegations($boss)->active();          // Collection<ApprovalDelegation>
Approvals::delegationFor($deputy);                // ?ApprovalDelegation in force now

// Housekeeping
Approvals::expire();                // lapse overdue asks, approvals and requests; returns int
Approvals::expire(subjectType: Invoice::class); // only those on invoices (class or morph alias)
```

## Metódy fasády

| Metóda | Vracia | Účel |
| --- | --- | --- |
| `for($approvable)` | PendingApproval | Začne rozhodnutie o schvaľovanom modeli; aktéra nastavíte cez as(). |
| `as($actor)` | PendingApproval | Začne rozhodnutie aktéra; schvaľovaný model nastavíte cez for(). |
| `request($subject)` | PendingApprovalRequest | Otvorí žiadosť pre viacerých schvaľovateľov — jednostupňovú, viacstupňovú alebo zo šablóny. |
| `status($subject)` | ApprovalStatus | Stav poslednej žiadosti subjektu; Pending, ak žiadnu nemá, a Expired, keď otvorenej žiadosti uplynula platnosť. |
| `progress($subject)` | ?ApprovalProgress | Snímka priebehu poslednej žiadosti; jej stav ukáže Expired, keď žiadosti uplynie platnosť. |
| `currentStage($subject)` | ?ApprovalRequestStage | Otvorený stupeň poslednej viacstupňovej žiadosti; null, keď je uzavretá alebo jej uplynula platnosť. |
| `preset($name)` | WorkflowPreset | Načíta a overí šablónu z config('approvals.workflows'). |
| `delegations($delegator)` | DelegationsHandle | Udelí, zruší a vypíše delegovania jedného delegujúceho. |
| `delegationFor($delegate, ?$at)` | ?ApprovalDelegation | Delegovanie, v rámci ktorého model koná v čase $at (predvolene teraz). |
| `expire(?$now, ?$subjectType)` | int | Nechá vypršať zmeškané vyžiadania, schválenia a žiadosti a vráti ich počet. S $subjectType (trieda modelu alebo morph alias) len tie na danom type. |
| `fake()` | ApprovalsFake | Vymení manažér za zaznamenávajúci fake; recorded() aj všetky assert\*() potom zavoláte aj na fasáde (pozri Testovanie). |

## Rozhodnutia — PendingApproval

Začnite od schvaľovaného modelu cez for() alebo od aktéra cez as(), doplňte kontext a zavolajte terminálnu metódu. Žiadosť, ktorá vymenúva schvaľovateľov, každého iného odmietne výnimkou UnauthorizedApprovalException a uzavretá žiadosť odmietne každé rozhodnutie výnimkou ClosedApprovalRequestException:

| Metóda | Vracia | Účel |
| --- | --- | --- |
| `for($approvable)` | self | Nastaví model, o ktorom sa rozhoduje. |
| `as($actor)` | self | Nastaví model, ktorý rozhoduje. close() ho odmietne. |
| `within($request)` | self | Pripojí rozhodnutie k tejto žiadosti namiesto poslednej otvorenej. Musí patriť schvaľovanému modelu (inak InvalidApprovalRequestException) a byť ešte otvorená (inak ClosedApprovalRequestException). Pri close() sa uzavrie len táto žiadosť. |
| `because($reason)` | self | Pripojí dôvod — rozhodnutia (approve(), reject(), ask(), zapnutie prepínača) alebo stiahnutia (cancel(), vypnutie prepínača). Odpoveď na vyžiadanie zapíše len vlastný dôvod, prípadne žiadny. close() dôvod odmietne; because(null) znamená bez dôvodu. |
| `weight($n)` | self | Prebije váhu tohto rozhodnutia — pre approve(), reject() a zapnutie prepínača. ask(), cancel() a close() ju odmietnu. |
| `expiresIn($seconds)` | self | Expirácia o N sekúnd — uplatní ju approve(), ask() (ako termín na odpoveď) a zapnutie prepínača. reject(), cancel() a close() ju odmietnu. |
| `expiringAt($at)` | self | Absolútna expirácia — uplatnia aj odmietnu ju tie isté volania ako expiresIn(). |
| `approve()` | Approval | Zaznamená schválenie. Započíta sa do pripnutej žiadosti, inak do poslednej otvorenej žiadosti modelu; opakovanie nič nezmení. |
| `reject()` | Approval | Zaznamená zamietnutie s because() a weight() — schválenie, ktoré aktér mal, sa stiahne. Zamietnutie nemá expiráciu, preto expirácia nastavená pred ním vyhodí InvalidApprovalRequestException. |
| `ask()` | Approval | Vyžiada od aktéra čakajúce rozhodnutie s because() ako dôvodom a expiráciou ako termínom na odpoveď; ak už živé rozhodnutie má, vráti ho nezmenené. weight() vyhodí InvalidApprovalRequestException. |
| `cancel()` | ?Approval | Stiahne živé rozhodnutie aktéra — alebo to, ktoré urobil ako zástupca v rámci ešte platného delegovania — v kole, kam by smerovalo rozhodnutie (pri viacstupňovej žiadosti len v otvorenom stupni), s because() ako dôvodom stiahnutia; null, ak žiadne nie je. weight() či expirácia vyhodí InvalidApprovalRequestException. |
| `close(?$outcome)` | int | Uzavrie otvorené kolá schvaľovaného modelu z vašej aplikácie — alebo len žiadosť z within() — ako Cancelled (predvolene) alebo Expired. Stačí for(); vráti počet kôl, ktoré toto volanie uzavrelo, 0, ak žiadne otvorené nebolo. because(), as(), weight() a expirácia vyhodia InvalidApprovalRequestException. |
| `toggle()` | bool | Jednoduchý prepínač v žiadosti z within(), inak v otvorenej — true schválené (cez approve(), s because(), weight() aj expiráciou), false stiahnuté (spustí ApprovalCancelled a because() poslúži ako dôvod stiahnutia). |
| `isApproved()` | bool | Či má aktér pre daný model schválenie, ktoré ešte platí. |
| `isRejected()` | bool | Či má aktér pre daný model zamietnutie. |
| `hasPending()` | bool | Či má model akékoľvek čakajúce rozhodnutie, ktorému ešte neuplynul termín — stačí for(). |

## Žiadosti — PendingApprovalRequest

| Metóda | Vracia | Účel |
| --- | --- | --- |
| `from([...])` | self | Menovaní schvaľovatelia jednostupňovej žiadosti — rozhodovať môžu len oni (alebo ich zástupcovia). Každý sa uloží raz; required\_approvers je predvolene ich počet. |
| `rule($rule, ?$quorum)` | self | Pravidlo a prah jednostupňovej žiadosti — predvolene Unanimous. |
| `any() / quorum($n) / weighted($n)` | self | Skratky pre rule(Any), rule(Quorum, $n) a rule(Weighted, $n). |
| `stages([StageDefinition, ...])` | self | Zmení žiadosť na viacstupňovú. Spolu s from() vyhodí open() InvalidApprovalRequestException. |
| `continueOnRejection()` | self | Viacstupňová: pokračuje aj po zamietnutom stupni. |
| `expiresIn($s) / expiringAt($t)` | self | Nastaví expires\_at na žiadosti. Ak expiráciu nastavíte pred workflow(), prenesie sa a nahradí expiry šablóny. |
| `open()` | ApprovalRequest | Otvorí jednostupňovú alebo viacstupňovú žiadosť; prah, ktorý by schvaľovatelia nikdy nedosiahli, odmietne, rovnako ako žiadosť, ktorú by jej pravidlo nikdy neschválilo — napr. Unanimous bez menovaných schvaľovateľov. |
| `workflow($name)->open([...])` | ApprovalRequest | Otvorí žiadosť zo šablóny — plochý zoznam alebo jeden zoznam na stupeň. workflow() vyhodí InvalidApprovalRequestException, ak ste predtým nastavili from(), rule(), any(), quorum(), weighted(), stages() či continueOnRejection(): tie definuje šablóna. |
| `workflow($name)->expiresIn($s) / expiringAt($t)` | PendingWorkflowRequest | Dá tomuto kolu vlastný termín namiesto expiry šablóny; platí naposledy nastavená expirácia. |

## Delegovanie — DelegationsHandle

| Metóda | Vracia | Účel |
| --- | --- | --- |
| `delegations($d)->to($delegate)` | PendingDelegation | Začne delegovanie — nič sa nezapíše pred grant(). |
| `->from($t) / ->until($t) / ->for($seconds)` | PendingDelegation | Nastaví obdobie; for() sa počíta od začiatku (bez from() od teraz). |
| `->grant()` | ApprovalDelegation | Overí obdobie, uloží ho a spustí ApprovalDelegated. |
| `delegations($d)->revoke(?$delegate)` | int | Zruší aktívne aj naplánované delegovania tohto delegujúceho — alebo len tie na $delegate. |
| `delegations($d)->active(?$at)` | Collection<ApprovalDelegation> | Delegovania platné v čase $at (teraz), najnovšie prvé. |

Pripnutie k žiadosti, pomocníka approvals(), absolútnu expiráciu, neúplné buildery a nastavenia, ktoré jednotlivé volania odmietnu, nájdete v časti Fluentné buildery; to isté API bez fasády v časti DI a akcie.

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