Fluentné buildery
Approvals::for(), as() a request() vracajú malé buildery, ktoré zbierajú kontext a nič nezapíšu až do terminálneho volania — approve(), reject(), ask(), cancel(), toggle() alebo open(). Každé terminálne volanie prechádza cez ApprovalsManager, takže ho Approvals::fake() zaznamená. Tabuľky metód sú v časti Fasáda Approvals.
Pripojenie rozhodnutia ku konkrétnej žiadosti
Rozhodnutie sa predvolene pripojí k poslednej otvorenej žiadosti schvaľovaného modelu. within() ho pripne ku konkrétnej žiadosti — tá musí patriť schvaľovanému modelu a byť ešte otvorená, takže rozhodnutie o jednom modeli sa nikdy nezapočíta do žiadosti iného a nič neskončí v už uzavretom kole:
use RoundlyConsulting\Approvals\Facades\Approvals;
$request = Approvals::request($release)->from([$lead, $qa])->open();
Approvals::for($release)->as($lead)->within($request)->because('Ship it')->approve();
Approvals::for($otherRelease)->as($lead)->within($request)->approve();
// InvalidApprovalRequestException — the request belongs to another subject; nothing is written
// …later, once $request has resolved:
Approvals::for($release)->as($qa)->within($request)->reject();
// ClosedApprovalRequestException — its round is over; nothing is writtenPomocník approvals()
Globálny pomocník approvals() vráti ten istý singleton manažér — hodí sa tam, kde uprednostňujete funkciu pred fasádou:
approvals()->for($deployment)->as($user)->approve(); // the same manager as the facade
Approvals::as($user)->for($deployment)->approve(); // start from either sideAbsolútna expirácia
expiresIn() prijíma počet sekúnd od teraz; expiringAt() ľubovoľnú inštanciu Carbon. Obe má builder rozhodnutia aj builder žiadosti:
use Carbon\CarbonImmutable;
use RoundlyConsulting\Approvals\Facades\Approvals;
Approvals::for($budget)->as($cfo)
->because('Within the quarterly limit')
->expiringAt(CarbonImmutable::parse('2026-12-31 23:59'))
->approve();Neúplný builder
Terminálne metódy rozhodnutia potrebujú aktéra aj schvaľovaný model. Ak niektorý chýba, vznikne IncompletePendingApprovalException; hasPending() potrebuje len schvaľovaný model:
use RoundlyConsulting\Approvals\Facades\Approvals;
Approvals::for($deployment)->approve();
// IncompletePendingApprovalException: No actor was set on the pending approval. Call as() first.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.