---
title: "Šablóny workflow — Approvals for Laravel | Roundly"
description: "Pravidlo, kvórum, stupne a expiráciu definujete raz v konfigurácii a žiadosti z nich otvárate menom — jednostupňové aj viacstupňové."
url: https://roundly-consulting.com/sk/open-source/navody/approvals-for-laravel/sablony-workflow
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)

# Šablóny workflow

Opakovane používané nastavenie pravidla, kvóra, stupňov a expirácie uložte do config('approvals.workflows') a volania zostanú krátke. Šablóna je jednostupňová (jedno pravidlo) alebo viacstupňová (zoznam stages):

```php
use RoundlyConsulting\Approvals\Enums\ApprovalRule;

'workflows' => [
    'payout' => [
        'rule' => ApprovalRule::Quorum->value,
        'quorum' => 2,
        'required_approvers' => 3,
        'expiry' => 86400,
    ],
    'release' => [
        'reject_on_stage_rejection' => true,
        'stages' => [
            ['rule' => ApprovalRule::Unanimous->value, 'required_approvers' => 2, 'name' => 'engineering'],
            ['rule' => ApprovalRule::Any->value,       'required_approvers' => 1, 'name' => 'product'],
        ],
    ],
],
```

## Otvorenie žiadosti zo šablóny

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

// Flat preset: a single approver list.
Approvals::request($budget)->workflow('payout')->open([$a, $b, $c]);

// Staged preset: one approver group per stage, in order.
Approvals::request($release)->workflow('release')->open([[$eng1, $eng2], [$product]]);

// Read a validated preset without opening anything.
Approvals::preset('payout');   // WorkflowPreset
```

open() vráti otvorenú ApprovalRequest. Žiadosť uloží názov šablóny do stĺpca workflow a expirácia zo šablóny nechá žiadosť vypršať rovnako ako expiresIn().

## Kľúče šablóny

| Kľúč | Rozsah | Poznámka |
| --- | --- | --- |
| `rule` | jednostupňová, každý stupeň | Prípad ApprovalRule alebo jeho hodnota; ak nie je nastavená (chýba, null alebo prázdna hodnota), predvolene unanimous. |
| `quorum` | jednostupňová, každý stupeň | Voliteľný celočíselný prah; prázdna hodnota sa považuje za nenastavenú. |
| `required_approvers` | jednostupňová, každý stupeň | Počet potrebných schválení — pri jednostupňovej šablóne voliteľný (predvolene veľkosť zoznamu), pri každom stupni povinné kladné celé číslo. Zoznam schvaľovateľov ich musí vymenovať aspoň toľko. |
| `expiry` | šablóna | Voliteľné kladné sekundy, rátané od otvorenia žiadosti — jej jediné expires\_at, spoločné pre všetky stupne viacstupňovej žiadosti; vyprší ako pri expiresIn(). Termín zadaný pri otvorení ho nahradí; prázdna hodnota sa považuje za nenastavenú (bez expirácie). |
| `reject_on_stage_rejection` | viacstupňová | Boolean alebo jeho textový zápis ('false', 0, 'off', … sa čítajú ako false); predvolene true — prázdna hodnota sa považuje za nenastavenú, takže tiež true. |
| `stages` | viacstupňová | Neprázdny zoznam stupňov: rule, required\_approvers, voliteľne quorum a name (ak je zadaný, reťazec; prázdny sa považuje za nenastavený). |

## Nastavenia, ktoré definuje šablóna

Šablóna definuje pravidlo kola, kvórum, stupne aj správanie pri zamietnutom stupni a schvaľovateľov prijíma v open(). Preto workflow() vyhodí InvalidApprovalRequestException, ak ste na builderi žiadosti predtým zavolali from(), rule(), any(), quorum(), weighted(), stages() alebo continueOnRejection() — aj s predvolenou hodnotou. Správa vymenuje každé z nich a nič sa neotvorí:

```php
// Refused: the preset would ignore from(), so none of them would be a named approver.
Approvals::request($payout)->from([$cfo, $controller, $treasurer])->workflow('payout')->open();
// InvalidApprovalRequestException: The approval workflow preset [payout] defines the rule, quorum,
// stages and stage rejection itself and takes its approvers in open(), so [from()] cannot be set
// before workflow(). Pass the approvers to open($approvers) instead of from().

// Supported: name the approvers in open().
Approvals::request($payout)->workflow('payout')->open([$cfo, $controller, $treasurer]);
```

Pred verziou 1.2.1 workflow() tieto nastavenia potichu zahodil: kolo otvorené cez ->from(\[...\])->workflow('payout')->open() nemalo menovaných schvaľovateľov, takže pri pravidle šablóny, ktoré mená nepotrebuje (any, kvórum či required\_approvers), oň mohol rozhodnúť ktorýkoľvek schvaľovateľ. Kolá otvorené takto pred aktualizáciou menovaných schvaľovateľov stále nemajú — skontrolujte tie, ktoré sú ešte otvorené.

## Vlastný termín kola

Od verzie 1.2.0 môže kolo otvorené zo šablóny dostať vlastný termín. Nastavíte ho na builderi šablóny alebo na builderi žiadosti pred workflow() — expirácia je jediné nastavenie buildera žiadosti, ktoré sa prenesie:

```php
// On the workflow builder.
Approvals::request($payout)->workflow('payout')->expiresIn(3600)->open([$a, $b, $c]);
Approvals::request($release)->workflow('release')->expiringAt(now()->addWeek())->open([[$eng1, $eng2], [$pm]]);

// On the request builder, before workflow(); the expiry carries over.
Approvals::request($payout)->expiresIn(3600)->workflow('payout')->open([$a, $b, $c]);
```

- Termín volajúceho má prednosť — nahradí expiry šablóny len pre toto kolo; šablóna sama sa nemení. Ak expiráciu nastavíte viackrát, pred workflow() či po ňom, platí posledná.
- Bez neho sa nič nemení — kolo dostane expiry šablóny, rátané od otvorenia, alebo žiadny termín, ak ho šablóna nemá.
- Jeden termín na kolo, viacstupňové či nie — je to expires\_at žiadosti. Stupeň, ktorý sa otvorí neskôr, ho zdieľa a nezačína odznova; po jeho uplynutí sa celá žiadosť číta ako expirovaná, nech je otvorený ktorýkoľvek stupeň.
- Každé kolo sa otvára samostatne — ďalšie kolo z tej istej šablóny dostane opäť expiry šablóny, ak si volanie nenastaví vlastný termín.
- expiresIn($seconds) sa ráta od okamihu volania, rovnako ako na builderi žiadosti. Akcia prijíma termín ako štvrtý argument — OpenWorkflowRequestAction::execute($subject, $preset, $approvers, $expiresAt) — kde null ponechá expiry šablóny.

## Zoznamy schvaľovateľov

- Jednostupňová šablóna — odovzdajte plochý zoznam schvaľovateľov; tí sa stanú menovanými schvaľovateľmi žiadosti. required\_approvers šablóny je počet potrebných schválení, ak je nastavené, inak jedno na schvaľovateľa.
- Viacstupňová šablóna — odovzdajte jednu skupinu schvaľovateľov na stupeň, v poradí stupňov; počet skupín sa musí rovnať počtu stupňov. required\_approvers stupňa je počet schválení, ktoré potrebuje, preto ich jeho skupina musí vymenovať aspoň toľko.
- Zoznam, ktorý vymenuje menej schvaľovateľov, než je required\_approvers, vyhodí pri otvorení žiadosti InvalidApprovalRequestException.
- O jednostupňovej šablóne otvorenej cez open(\[\]) môže rozhodnúť ktokoľvek, ak sa jej pravidlo dá splniť aj bez mien — cez required\_approvers, kvórum alebo pravidlo any. Inak otvorenie vyhodí InvalidApprovalRequestException.

## Validácia

Neznáma alebo chybná šablóna vyhodí UnknownWorkflowException — chýbajúci názov, šablóna, ktorá nie je pole, prázdny zoznam stages, stupeň bez kladného celočíselného required\_approvers, neceločíselné quorum, required\_approvers či expiry, expiry menšie ako 1, nereťazcový name stupňa, reject\_on\_stage\_rejection, ktoré nie je booleanom ani jeho textovým zápisom, neznáme pravidlo alebo viacstupňová šablóna otvorená s nesprávnym počtom skupín. Voliteľný kľúč šablóny ponechaný prázdny ('') sa považuje za nenastavený a dostane predvolenú hodnotu: unanimous pre rule, žiadnu pre quorum, expiry a name, true pre reject\_on\_stage\_rejection. Hodnota workflows, ktorá nie je pole, namiesto toho vyhodí InvalidConfigurationException.

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