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

DI, akcie a DTO

Balík má tri rovnocenné vstupné body a všetky spúšťajú ten istý kód:

  • Fasáda Requests — najkratší zápis a odporúčaná voľba.
  • Manažér RoundlyConsulting\Requests\RequestManager — koreň fasády. Injektujte ho cez konštruktor a dostanete rovnaké API ako explicitnú závislosť, bez statických volaní. Každú akciu získava z kontajnera, takže vaše prepisy platia.
  • Akcie v RoundlyConsulting\Requests\Actions — jednoúčelové triedy s metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov.

Injektovanie manažéra

use RoundlyConsulting\Requests\Models\Request;
use RoundlyConsulting\Requests\RequestManager;

final class SubmitClaim
{
    public function __construct(private RequestManager $requests) {}

    public function __invoke(User $user): Request
    {
        return $this->requests->make()->author($user)->title('Expense reimbursement')->create();
    }
}

Requests::fake() podstrčí podtyp RequestManager za fasádu aj do kontajnera, takže fake dostane aj manažér injektovaný cez konštruktor.

Volanie akcie

CreateRequest prijíma CreateRequestDto a vyvolá RequestCreated:

use RoundlyConsulting\Requests\Actions\CreateRequest;
use RoundlyConsulting\Requests\DataTransferObjects\CreateRequestDto;
use RoundlyConsulting\Requests\Enums\Status;

$request = app(CreateRequest::class)->execute(new CreateRequestDto(
    status: Status::New,
    author: $user,
    title: 'Expense reimbursement',
    meta: collect(['ip' => request()->ip()]),
    approvers: [$alice, $bob],
    expiresAt: now()->addDays(7),
));

Metóda fasády → akcia

Metóda fasády / manažéraAkcia
make()->create(), create(CreateRequestDto)CreateRequest
approve(), reject(), reopen()ResolveRequest
cancel($request)CancelRequest
expire($request)ExpireRequest
expireDue(bool $dryRun = false, int $chunk = 500)ExpireDueRequests
canTransition($request, Status $to)— (číta graf životného cyklu)

Priamo volané akcie obídu manažér, preto ich Requests::fake() nezaznamená.

Všetky polia DTO

CreateRequestDto je readonly trieda s pomenovanými argumentmi konštruktora a predvolenými hodnotami:

new CreateRequestDto(
    status: Status::New,               // Status
    author: null,                      // ?Model
    type: null,                        // ?string
    title: null,                       // ?string
    description: null,                 // ?string
    meta: null,                        // ?Collection
    approvers: [],                     // list<Model> — the declared approvers (saved models)
    expiresAt: null,                   // ?CarbonInterface
    rule: ApprovalRule::Unanimous,     // ApprovalRule
    quorum: null,                      // ?int
    stages: [],                        // list<StageDefinition> — an ad-hoc pipeline
    workflow: null,                    // ?string — a named preset
    stageApprovers: [],                // list<list<Model>> — groups for a staged preset
    rejectOnStageRejection: true,      // bool
);

Ktoré schvaľovanie sa otvorí

CreateRequest otvorí najviac jednu schvaľovaciu požiadavku, v tomto poradí priority:

  • workflow — pomenovaná predvoľba má prednosť; použije stageApprovers, ak sú zadané, inak approvers.
  • stages — explicitné viacstupňové schvaľovanie s ohľadom na rejectOnStageRejection. Jednoduchý zoznam schvaľovateľov zadaný popri stupňoch sa odovzdá tiež, takže engine takúto kombináciu odmietne.
  • approvers — jednoduché schvaľovacie kolo so zvoleným pravidlom a kvórom, ktoré týchto schvaľovateľov menovite určí.
  • nič — bez deklarovaných schvaľovateľov sa kolo neotvorí a žiadosť uzavrie prvé rozhodnutie.

Schvaľovatelia musia byť uložené modely: samotné id neurčuje typ modelu, takže by sa nedalo vynútiť, a CreateRequest ho v approvers aj stageApprovers odmietne výnimkou InvalidApprover. Žiadosť a jej schvaľovacie kolo sa zapisujú spolu — ak sa kolo nedá otvoriť (neuložený schvaľovateľ, neznáma predvoľba workflowu), žiadna žiadosť nezostane.

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.