---
title: "Stavy a strážené prechody — Requests for Laravel | Roundly"
description: "Päť stavov, ich pomocné metódy, graf životného cyklu a voliteľná ochrana, ktorá odmietne nepovolené prechody."
url: https://roundly-consulting.com/sk/open-source/navody/requests-for-laravel/stavy-a-prechody
language: sk
---

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

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

# Stavy a strážené prechody

Každá žiadosť je vždy práve v jednom z piatich stavov. Enum poskytuje metódy životného cyklu aj spoločné pomocné metódy pre selecty a validáciu:

```php
$request->status->isOpen();                          // true only for New
$request->status->isTerminal();                      // Approved, Rejected, Cancelled, Expired
$request->status->canTransitionTo(Status::Approved); // bool, per the lifecycle graph
$request->status->allowedTransitions();              // list<Status>

// Shared helpers from enums-for-laravel:
Status::values();
Status::labels();
Status::options();
Status::validationRule();
$request->status->label();
```

## Graf životného cyklu

```
New        -> Approved | Rejected | Cancelled | Expired
Approved   -> Rejected | New (reopen) | Cancelled
Rejected   -> New (reopen)
Expired    -> New (reopen)
Cancelled  -> (terminal)
```

## Vynútenie prechodov

Nastavte requests.enforce\_transitions na true a graf sa začne vynucovať. Nepovolené prechody — napríklad schválenie zamietnutej žiadosti — potom vyhodia InvalidStatusTransition s vlastnosťami $from a $to:

```php
// config/requests.php: 'enforce_transitions' => true

use RoundlyConsulting\Requests\Exceptions\InvalidStatusTransition;

try {
    Requests::approve($rejectedRequest, $alice);
} catch (InvalidStatusTransition $e) {
    $e->from; // Status::Rejected
    $e->to;   // Status::Approved
}
```

- approve(), reject(), reopen(), cancel() a expire() pred vykonaním overia graf voči uloženému stavu — pri zapnutom prepínači vyhodí expirácia schválenej žiadosti InvalidStatusTransition, aj keď ide o kópiu načítanú ešte v stave New.
- Prechod do aktuálneho stavu je vždy povolený.
- Listener nepovolené rozhodnutie enginu namiesto vyhodenia výnimky preskočí.
- Pri vypnutom prepínači (predvolené) sa ochrana vynechá a rozhodnutia sa uplatnia priamo — uzavretá žiadosť však zostane uzavretá v každom prípade.

## Uzavreté žiadosti

Zrušená alebo expirovaná žiadosť je uzavretá bez ohľadu na enforce\_transitions: žiadosť Cancelled je konečná a Expired možno iba znovu otvoriť cez Requests::reopen(). Akákoľvek iná akcia na nej vyhodí RequestAlreadyResolved. Zrušenie už zrušenej či expirácia už expirovanej žiadosti neurobí nič.

## Súbežné zmeny

Každý zápis stavu znova načíta riadok žiadosti cez lockForUpdate() v transakcii a kontroly — žiadosť už v danom stave je, je uzavretá, enforce\_transitions — vyhodnotí voči uloženému stavu, nikdy nie voči kópii, ktorú držíte. Platí to pre cancel(), expire(), reopen(), approve() / reject() pri žiadosti bez schvaľovateľov, čistenie requests:expire aj listener, ktorý premieta výsledky enginu.

- Kópia načítaná pred súbežným rozhodnutím, zrušením či čistením neprepíše novší stav — nenechá expirovať schválenú žiadosť a zrušenú neschváli, znovu neotvorí ani nevráti späť.
- Udalosti vznikajú až po transakcii a len pri skutočnej zmene stavu, takže schválenie, zrušenie a plánované čistenie, ktoré prídu naraz, oznámia každú zmenu práve raz.

## Otázka na graf

Prechod si overte ešte pred akciou — napríklad pri rozhodovaní, či zobraziť tlačidlo Schváliť:

```php
use RoundlyConsulting\Requests\Enums\Status;
use RoundlyConsulting\Requests\Facades\Requests;

// Answers the same way whether or not enforcement is on
Requests::canTransition($request, Status::Approved); // bool
```

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