Routing
Bosia menggunakan routing berbasis file. File-file di dalam src/routes/ dipetakan langsung ke URL.
Route Statis
Section titled “Route Statis”src/routes/+page.svelte → /src/routes/about/+page.svelte → /aboutsrc/routes/blog/+page.svelte → /blogSetiap file +page.svelte menjadi halaman pada path direktorinya.
Route Dinamis
Section titled “Route Dinamis”Bungkus nama direktori dalam tanda kurung siku untuk membuat segmen dinamis:
src/routes/blog/[slug]/+page.svelte → /blog/hello-world /blog/my-post /blog/anythingAkses nilai yang cocok melalui params:
export async function load({ params }: LoadEvent) { const post = await getPost(params.slug); return { post };}Catch-All Routes
Section titled “Catch-All Routes”Gunakan [...rest] untuk mencocokkan beberapa segmen path:
src/routes/all/[...catchall]/+page.svelte → /all/a /all/a/b/c /all/anything/hereparams.catchall berisi seluruh sub-path yang cocok (misalnya "a/b/c").
Route Groups
Section titled “Route Groups”Direktori yang dibungkus dalam tanda kurung tidak terlihat di URL tetapi memungkinkan Anda berbagi layout:
src/routes/(public)/+layout.svelte ← layout bersamasrc/routes/(public)/+page.svelte → /src/routes/(public)/about/+page.svelte → /about
src/routes/(admin)/+layout.svelte ← layout berbedasrc/routes/(admin)/dashboard/+page.svelte → /dashboardGrup (public) dan (admin) tidak pernah muncul di URL. Mereka hanya mengontrol +layout.svelte mana yang membungkus halaman di dalamnya.
Prioritas Route
Section titled “Prioritas Route”Ketika beberapa route bisa cocok dengan URL, Bosia menyelesaikannya secara berurutan:
- Pencocokan tepat — route statis seperti
/about - Segmen dinamis — route
[param] - Catch-all — route
[...rest]
Layouts
Section titled “Layouts”+layout.svelte membungkus semua halaman dan child layout di dalam direktorinya:
<script lang="ts"> import "../app.css"; let { children, data } = $props();</script>
<nav> <a href="/">Home</a> <a href="/about">About</a></nav>
<main> {@render children()}</main>Layout bersarang secara otomatis — layout root membungkus layout grup, yang membungkus layout halaman. Konten anak dirender di mana {@render children()} berada.
Data Layout
Section titled “Data Layout”Pasangkan layout dengan +layout.server.ts untuk memuat data:
import type { LoadEvent } from "bosia";
export async function load({ locals }: LoadEvent) { return { appName: "My App", user: locals.user, };}Semua halaman dan layout anak dapat mengakses data ini melalui parent() di loader mereka sendiri.
Halaman Error
Section titled “Halaman Error”Buat +error.svelte untuk menangani error yang dilempar oleh loader:
<script lang="ts"> let { error } = $props();</script>
<h1>{error.status}</h1><p>{error.message}</p>Halaman error menerima HttpError yang dilempar oleh error() di dalam loader. Tempatkan halaman error pada level route di mana Anda ingin menangkap error — halaman ini menangkap error dari semua route anak.