DI a akcie
Fasáda je odporúčaná voľba, nie jediná cesta. K dispozícii máte tri rovnocenné vstupné body:
- Fasáda Forms — najkratší zápis, ktorý používa aj zvyšok tejto dokumentácie.
- Manažér RoundlyConsulting\Forms\FormsManager — koreň fasády. Injektujte ho cez konštruktor a získate rovnaké API s explicitnou závislosťou a bez statických volaní.
- Akcie — jednoúčelové triedy v RoundlyConsulting\Forms\Actions s metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov.
Injektovanie manažéra
use Illuminate\Http\Request;
use RoundlyConsulting\Forms\FormsManager;
final class ContactFormController
{
public function __construct(private FormsManager $forms) {}
public function store(Request $request)
{
$form = $this->forms->find('contact');
$this->forms->validate($form, $request);
$result = $this->forms->submit($form, $request, $request->user());
$this->forms->submission($result->uuid)->get(); // builders and handles work too
return back()->with('reference', $result->uuid);
}
}FormsManager je autowired singleton a zámerne nie je final: Forms::fake() ho nahradí triedou FormsFake, ktorá z neho dedí, takže fake platí aj pre injektovaných manažérov.
Volanie akcie
use RoundlyConsulting\Forms\Actions\FindFormAction;
use RoundlyConsulting\Forms\Actions\StoreSubmissionAction;
// Resolve from the container (or inject into your own action, job or command).
$form = app(FindFormAction::class)->execute('contact');
$result = app(StoreSubmissionAction::class)->execute($form, $request, $user);Manažér pri každom volaní získa akciu z kontajnera, takže vlastná implementácia akcie zmení aj správanie fasády. Fake zaznamenáva na úrovni manažéra — akciu, ktorú zavoláte priamo, nezaznamená.
Metóda fasády → akcia
| Metóda fasády | Akcia | execute() |
|---|---|---|
find() | FindFormAction | (string $key): Form |
create(), define()->create() | CreateFormAction | (FormDefinitionData $data): Form |
update()->save() | UpdateFormAction | (FormDefinitionData $data): Form |
sync(), forms:sync | SyncFormsAction | (?array $definitions = null): list<string> |
validate() | ValidateSubmissionAction | (Form $form, Request $request): array |
submit() | StoreSubmissionAction | (Form, Request, ?Model $sender, bool $bypassClosed): SubmissionResult |
draft() | DraftSubmissionAction | (Form, Request, ?Model $sender, ?string $uuid, bool $bypassClosed): SubmissionResult |
finalize(), submission()->finalize() | FinalizeSubmissionAction | (string $uuid, bool $bypassClosed = false): SubmissionResult |
submission()->model(), review($uuid) | FindSubmissionAction | (string $uuid): FormSubmission |
review()->…->open() | ReviewSubmissionAction | (FormSubmission, array $approvers, ApprovalRule $rule, ?int $quorum): ApprovalRequest |
createSubmission() | CreateSubmissionAction | (SubmissionData $data): Submission |
ValidateFieldTypesAction a CreateFormSubmissionAction sú @internal stavebné bloky validácie a odosielania — nie sú určené na priame použitie v aplikácii.
Akcie, ktoré prijímajú DTO
CreateFormAction a UpdateFormAction prijímajú FormDefinitionData (vytvoríte ju cez FormDefinitionData::fromArray()); CreateSubmissionAction prijíma SubmissionData (SubmissionData::forField()). Akcia pre surový riadok vynecháva kontrolu uzavretého formulára, ktorú pridáva Forms::createSubmission():
use RoundlyConsulting\Forms\Actions\CreateFormAction;
use RoundlyConsulting\Forms\Actions\CreateSubmissionAction;
use RoundlyConsulting\Forms\DataTransferObjects\FormDefinitionData;
use RoundlyConsulting\Forms\DataTransferObjects\SubmissionData;
$form = app(CreateFormAction::class)->execute(FormDefinitionData::fromArray([
'key' => 'newsletter',
'name' => 'Newsletter',
'groups' => [],
]));
// The raw row write — no closed-form check (Forms::createSubmission() adds it).
$row = app(CreateSubmissionAction::class)->execute(
SubmissionData::forField($field, $uuid, ['value' => 'Jane'], $user),
);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.