DI a akcie
Balík má tri rovnocenné vstupné body a všetky spúšťajú ten istý kód:
- Fasáda Approvals — najkratší zápis a odporúčaná voľba.
- Manažér RoundlyConsulting\Approvals\ApprovalsManager — koreň fasády. Injektujte ho cez konštruktor a dostanete rovnaké API ako explicitnú závislosť, bez statických volaní.
- Akcie v RoundlyConsulting\Approvals\Actions — jednoúčelové triedy s metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov.
Injektovanie manažéra
use RoundlyConsulting\Approvals\ApprovalsManager;
final class ApproveInvoice
{
public function __construct(private ApprovalsManager $approvals) {}
public function __invoke(Invoice $invoice, User $user): void
{
$this->approvals->for($invoice)->as($user)->approve();
}
}Approvals::fake() podstrčí podtyp ApprovalsManager fasáde aj injektovaným manažérom, takže aj takto napísaný kód sa v testoch zaznamená.
Volanie akcie
use RoundlyConsulting\Approvals\Actions\ApproveAction;
use RoundlyConsulting\Approvals\Actions\OpenApprovalRequestAction;
use RoundlyConsulting\Approvals\DataTransferObjects\ApprovalRequestData;
use RoundlyConsulting\Approvals\DataTransferObjects\DecisionData;
use RoundlyConsulting\Approvals\Enums\ApprovalRule;
app(OpenApprovalRequestAction::class)->execute(
new ApprovalRequestData($invoice, [$a, $b, $c], ApprovalRule::Quorum, quorum: 2),
);
app(ApproveAction::class)->execute($user, $invoice, DecisionData::approved('LGTM'));Manažér si každú akciu tiež vytvára z kontajnera, takže binding, ktorý pre akciu zaregistrujete, platí aj pri volaní cez fasádu.
Metóda fasády → akcia
| Akcia | Cesta cez fasádu |
|---|---|
ApproveAction | for()->as()->approve() |
RejectAction | for()->as()->reject() |
RequestApprovalAction | for()->as()->ask() |
CancelApprovalAction | for()->as()->cancel() |
ToggleApprovalAction | for()->as()->toggle() |
OpenApprovalRequestAction | request()->from()->open() |
RequestStagedApprovalAction | request()->stages()->open() |
OpenWorkflowRequestAction | request()->workflow()->open() |
DelegateApprovalsAction | delegations()->to()->grant() |
RevokeApprovalDelegationAction | delegations()->revoke() |
ExpireApprovalsAction | expire() |
Signatúry všetkých metód execute() a DTO, ktoré akcie prijímajú, nájdete v časti Akcie a DTO.
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.