Všetky výnimky balíka sú v RoundlyConsulting\Approvals\Exceptions a rozširujú ApprovalsException, ktorá je sama RuntimeException — jeden catch tak pokryje celú rodinu:
| Výnimka | Kedy vznikne |
|---|---|
ChangedApprovalSubjectException | Rozhodnutie — approve, reject, ask či zapnutie prepínača — smeruje do kola, ktorého odtlačok subjektu sa od otvorenia zmenil, pri fingerprint.on_change nastavenom na refuse alebo void (for). $request je kolo; $voided hovorí, či sa pritom zneplatnilo. Nič sa nezapíše. Od verzie 2.2.0. |
ClosedApprovalRequestException | Rozhodnutie, stiahnutie alebo výmena schvaľovateľov — approve, reject, toggle, ask, cancel, replaceApprovers() či replaceFlatApprovers() — smeruje do uzavretej žiadosti (schválenej, zamietnutej, zrušenej či expirovanej), pripnutej cez within() aj vtedy, keď je otvorené neskoršie kolo, alebo preto, že všetky žiadosti subjektu sú uzavreté (for); replaceApprovers() či replaceFlatApprovers() na kole, ktoré ešte čaká, no uplynula mu platnosť, pričom ho nenechá vypršať (overdue); rozhodnutie, ktoré sa k zámku kola dostane až po tom, čo ho uzavrelo voidIfChanged() alebo uzatvárajúce recheckThreshold(). Vlastnosť $request je táto žiadosť. |
IncompletePendingApprovalException | Builder rozhoduje bez aktéra (missingActor) alebo bez schvaľovaného modelu (missingApprovable). |
InvalidApprovalModelException | Nakonfigurovaná trieda modelu nerozširuje očakávaný základný model (forClass). |
InvalidApprovalRequestException | Rozhodnutie — aj toggle() — alebo close() je pripojené k žiadosti iného subjektu (foreignSubject); builder žiadosti dostane from() aj stages() (mixedApprovers); workflow() nasleduje po from(), rule(), any(), quorum(), weighted(), stages() či continueOnRejection(), ktoré definuje šablóna (definedByWorkflow); ask() nasleduje po weight() (weightOnAsk); reject() po expirácii (expiryOnReject); cancel() po weight() či expirácii (settingsOnCancel); close() po because() (reasonOnClose) alebo po as(), weight() či expirácii (settingsOnClose); schvaľovateľ nie je uložený (unsavedApprover); žiadosť potrebuje viac schválení, než vymenuje schvaľovateľov (moreRequiredThanNamed); kvórum je menšie ako 1 (thresholdBelowOne) alebo ho schvaľovatelia nemôžu dosiahnuť (unreachableThreshold); žiadosť či stupeň, ktoré by ich pravidlo nikdy neschválilo, lebo nepotrebujú žiadne schválenie — napr. žiadosť bez menovaných schvaľovateľov pri predvolenom pravidle Unanimous (needsNoApprovals). replaceApprovers() navyše odmietne as(), because(), weight() či expiráciu (settingsOnReplace), prázdny zoznam (noReplacementApprovers), subjekt, ktorý nikdy nemal kolo (noRound), jednostupňové kolo (notStaged), stupeň, ktorý kolo nemá (unknownStage) alebo ktorý nie je otvorený (stageNotOpen), schvaľovateľa, ktorý už o stupni rozhodol (alreadyDecided), a zoznam, pri ktorom by už urobené rozhodnutia stupeň hneď uzavreli (replacementSettlesStage). Od verzie 2.2.0 aj: vylúčený aktér uvedený medzi schvaľovateľmi pri otvorení či výmene (excludedApprover), neuložený aktér odovzdaný do excluding() (unsavedExcludedActor), odtlačok dlhší ako 255 znakov (fingerprintTooLong), replaceFlatApprovers() na viacstupňovom kole (staged), so schvaľovateľom, ktorý už o kole rozhodol (alreadyDecidedRound), alebo so zoznamom, pri ktorom by sa kolo hneď uzavrelo (replacementSettlesRound), a replaceFlatApprovers(), voidIfChanged() či recheckThreshold() s as(), because(), weight() alebo expiráciou (settingsOnSubjectCall). |
InvalidDelegationException | Delegovanie na seba (selfDelegation), obdobie, ktoré končí skôr, než začne (endsBeforeStart), alebo ApprovalDelegation::revoke($at) s časom v budúcnosti (futureRevocation). |
InvalidStatusTransitionException | Nepovolený prechod stavu na modeli Approval (between), alebo close() s iným výsledkom než Cancelled či Expired — aj keď nie je otvorené žiadne kolo (notAClosingOutcome), alebo recheckThreshold() s iným výsledkom uzavretia než Cancelled či Rejected (notAnUnreachableOutcome). |
UnauthorizedApprovalException | Autorizačná Gate aktéra odmietne (forActor), alebo aktér nie je menovaným schvaľovateľom žiadosti či jej otvoreného stupňa ani zástupcom niektorého z nich (notAnApprover) — aj vtedy, keď replaceApprovers() či replaceFlatApprovers() aktéra alebo schvaľovateľa, za ktorého koná, vyradil, kým bolo jeho rozhodnutie na ceste. Tiež keď je aktér z rozhodovania vylúčený (excluded) alebo by rozhodoval za vylúčeného schvaľovateľa (excludedPrincipal). |
UnknownWorkflowException | Šablóna workflow chýba (named) alebo je chybná (invalid). |
use RoundlyConsulting\Approvals\Exceptions\ApprovalsException;
use RoundlyConsulting\Approvals\Exceptions\ClosedApprovalRequestException;
use RoundlyConsulting\Approvals\Exceptions\UnauthorizedApprovalException;
use RoundlyConsulting\Approvals\Facades\Approvals;
try {
Approvals::for($post)->as($user)->approve();
} catch (UnauthorizedApprovalException $e) {
// the gate denied this actor, or the request does not name it
} catch (ClosedApprovalRequestException $e) {
// the round is over — $e->request is the closed request
} catch (ApprovalsException $e) {
// any other approvals error
}Každú výnimku vytvára pomenovaná statická factory uvedená v zátvorke vyššie, čo sa hodí pri overovaní správ v testoch.
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 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.