NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Requests for Laravel

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:

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

// 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 — pri zapnutom prepínači vyhodí expirácia schválenej žiadosti výnimku.
  • 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č.

Otázka na graf

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

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

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

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.