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

Validácia a odosielanie

Fasáda Forms načíta formulár so zoradenými skupinami a poliami, zvaliduje vstup requestu podľa pravidiel jednotlivých polí a uloží odpovede:

use RoundlyConsulting\Forms\Facades\Forms;

// Eager-loads groups and fields, ordered by their `order` column.
// Throws RoundlyConsulting\Forms\Exceptions\FormNotFoundException for an unknown key.
$form = Forms::find('contact');

// Validate request input — throws Illuminate\Validation\ValidationException on failure
// (a broken field rule and a value that fails its field's type alike). Returns the validated data.
$validated = Forms::validate(form: $form, request: request());

// Persist a submission for every field. Returns a SubmissionResult.
$result = Forms::submit(
    form: $form,
    request: request(),
    sender: auth()->user(), // any Eloquent model, or null
);

$result->uuid;        // shared reference id for this submission
$result->fieldCount;  // number of fields stored
$result->submittedAt; // CarbonInterface timestamp

submit() ukladá, nevaliduje. Najprv zavolajte validate() — spustí validátor Laravelu s pravidlami každého viditeľného poľa (názvy polí použije ako popisy atribútov spolu s vašimi hláškami) a potom skontroluje typy hodnôt. Obe zlyhania vyhodia rovnakú ValidationException, takže Laravel v oboch prípadoch presmeruje späť s chybami. Typický controller:

use Illuminate\Http\Request;
use RoundlyConsulting\Forms\Facades\Forms;

final class ContactFormController
{
    public function store(Request $request)
    {
        $form = Forms::find('contact');

        // Throws ValidationException (redirect back with errors) on failure.
        Forms::validate($form, $request);

        $result = Forms::submit($form, $request, $request->user());

        return back()->with('reference', $result->uuid);
    }
}

submit() beží v transakcii: vytvorí jeden agregát FormSubmission a jeden riadok Submission na každé pole, všetky so spoločným vráteným uuid, a potom spustí FormSubmitted. Pole skryté svojimi podmienkami dostane riadok bez hodnoty — nič, čo preň request poslal, sa neuloží. Odosielateľom je ľubovoľný Eloquent model, pri anonymných odpovediach null.

Uzavreté formuláre sa odmietajú

Každá cesta k finálnej odpovedi odmietne formulár, ktorý odpovede neprijíma — neverejný alebo s uplynutým expires_at — výnimkou FormSubmissionClosedException: submit(), draft() (aj draftTo()), finalize() aj surové createSubmission(). finalize() kontroluje znova, takže koncept uložený pri otvorenom formulári po jeho uzavretí nefinalizujete. Pre dôveryhodné interné či administrátorské odoslania použite bypassClosed: true:

use RoundlyConsulting\Forms\Exceptions\FormSubmissionClosedException;

try {
    Forms::submit($form, request(), $user);
} catch (FormSubmissionClosedException $e) {
    // the form is not public, or its expires_at has passed
}

// trusted internal/admin submissions skip the check
Forms::submit($form, request(), $user, bypassClosed: true);
Forms::draft($form, request(), $user, bypassClosed: true);
Forms::finalize($uuid, bypassClosed: true);

Nízkoúrovňové API

// Write a single per-field row directly (imports, seeds) — the value is stored as-is.
// A new uuid is generated unless you pass one; rows that share a uuid form one submission.
$first = Forms::createSubmission($nameField, ['value' => 'Ann'], $user, bypassClosed: true);
Forms::createSubmission($emailField, ['value' => '[email protected]'], $user, uuid: $first->uuid, bypassClosed: true);

Forms::submission($first->uuid)->get()->values; // ['name' => 'Ann', 'email' => '[email protected]']

createSubmission() zapíše jeden riadok priamo a platí preň pravidlo uzavretého formulára, pokiaľ neodovzdáte bypassClosed: true. Riadky so spoločným uuid sa zaradia pod jednu finálnu odpoveď, ktorú vytvorí prvý z nich — Forms::submission($uuid) ju teda načíta a Forms::review($uuid) pošle na schválenie ako každú inú. Neplatné uuid alebo uuid odpovede iného formulára či konceptu vyhodí SubmissionNotFoundException. Chcete radšej injektovaného manažéra alebo akcie? Pozrite DI a akcie.

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.