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); // boolPrejavte 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 kryptomienOdoslaní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.