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

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ádyAkciaexecute()
find()FindFormAction(string $key): Form
create(), define()->create()CreateFormAction(FormDefinitionData $data): Form
update()->save()UpdateFormAction(FormDefinitionData $data): Form
sync(), forms:syncSyncFormsAction(?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 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.