Form Actions
Form action memungkinkan Anda menangani pengiriman <form> di server, dengan pola validasi bawaan.
Mendefinisikan Actions
Section titled “Mendefinisikan Actions”Ekspor objek actions dari +page.server.ts:
import { fail } from "bosia";import type { RequestEvent } from "bosia";
export async function load() { return { greeting: "Contact us" };}
export const actions = { default: async ({ request }: RequestEvent) => { const data = await request.formData(); const email = data.get("email") as string; const name = data.get("name") as string;
const errors: Record<string, string> = {}; if (!email) errors.email = "Email is required"; if (!name) errors.name = "Name is required";
if (Object.keys(errors).length > 0) { return fail(400, { email, name, errors }); }
// Process the form... return { success: true, email, name }; },};Default Action
Section titled “Default Action”Sebuah <form method="POST"> tanpa atribut action akan mengenai action default:
<form method="POST"> <input name="name" value={form?.name ?? ""} /> <input name="email" value={form?.email ?? ""} /> <button type="submit">Submit</button></form>Named Actions
Section titled “Named Actions”Gunakan atribut action dengan awalan ?/ untuk menarget action tertentu:
<form method="POST" action="?/reset"> <button type="submit">Reset</button></form>export const actions = { default: async ({ request }: RequestEvent) => { // ... }, reset: async () => { return { cleared: true }; },};Validasi dengan fail()
Section titled “Validasi dengan fail()”fail() mengembalikan sebuah ActionFailure — ia dikembalikan, bukan dilempar:
import { fail } from "bosia";
// Returns a 400 response with the error datareturn fail(400, { email, // preserve user input name, errors: { email: "Invalid email format" },});Mengakses Data Action
Section titled “Mengakses Data Action”Hasil action tersedia sebagai prop form:
<script lang="ts"> let { data, form } = $props();</script>
{#if form?.errors} <p class="text-red-500">{form.errors.email}</p>{/if}
{#if form?.success} <p class="text-green-500">Submitted successfully!</p>{/if}Redirect dari Actions
Section titled “Redirect dari Actions”Gunakan redirect() untuk berpindah halaman setelah action berhasil:
import { redirect } from "bosia";
export const actions = { default: async ({ request }: RequestEvent) => { // Process form... redirect(303, "/thank-you"); },};Cara Kerjanya
Section titled “Cara Kerjanya”- Browser mengirimkan formulir sebagai request POST standar
- Bosia memanggil fungsi action yang cocok
- Saat berhasil: halaman dirender ulang dengan nilai kembalian action sebagai prop
formdan dataload()yang segar - Saat fail(): halaman dirender ulang dengan data kegagalan sebagai prop
formpada kode status yang ditentukan - Saat redirect(): browser mengikuti redirect