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 timestampsubmit() 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 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.