5: Routeren
Routing in Phlo koppelt een spatie-gescheiden pad + HTTP-methode aan een doel (meestal een methode). Routes van alle .phlo-bestanden worden verzameld; de router wordt geactiveerd met app::route().
5.1: Basisformulier
route [async|both] [GET|POST|PUT|DELETE|PATCH] pad [pad2 ...] => target
- Paden worden geschreven met spaties (geen
/in de route-definitie). - Doel: een directe aanroep of statementblok.
Voorbeeld:
route GET home => $this->main
method main => view($this->home)5.2: sync / async / beide
| Trefwoord | Gedrag |
|---|---|
| (weggelaten) | Sync alleen (reguliere HTTP) |
async |
Async alleen (verzoeken van een Phlo frontend) |
both |
Sync en async toegestaan |
route both GET data => $this->loadData
route async POST items save => $this->saveItems5.3: Variabelen
Phlo parseert elk padsegment. Segmenten die beginnen met $ zijn variabelen met extra mogelijkheden:
4.3.1 Vereist (doorgegeven aan de doel)
route GET user $id => $this->showUser($id)
method showUser($id) => view($this->profile)
4.3.2 Optionele aanwezigheid met ? → boolean
route GET search $full? => $this->search($full)
- Matcht
/searchen/search/full. $fullis waar wanneer het segmentfullaanwezig is, anders onwaar. (De implementatie controleert letterlijk of het aanvraagsegment gelijk is aan de naam zonder de?.)
4.3.3 Rest (variabele lengte) met =*
route GET file $path=* => $this->serveFile($path)
- Matcht alle resterende segmenten als één string in
$path.
4.3.4 Standaardwaarde met =
route GET page $slug=home => $this->page($slug)
- Zonder een segment →
$slug = 'home'. - Met een segment →
$slug = '<value>'.
4.3.5 Lengte-eis met .N
route GET code $pin.6 => $this->enter($pin)
- Matcht alleen wanneer de lengte van
$pinprecies 6 is.
4.3.6 Waardenlijsten met :a,b,c
route GET report $range:daily,weekly,monthly => $this->report($range)
- Het segment moet een van de opgegeven waarden zijn.
- Wanneer het segment afwezig is (leeg) en er een standaard is ingesteld, wordt de standaard toegepast.
- Anders mislukt de match.
Je kunt deze vormen combineren. Voorbeelden:
Enum met een vereiste id:
route GET export $fmt:csv,json $id => $this->export($fmt, $id)
Enum met een standaard:
route GET theme $name:light,dark=light => $this->theme($name)5.4: Payload controle met `@`
Je specificeert exacte body-sleutels met een enkele @ en een komma-gescheiden lijst. De router vergelijkt dit 1-op-1 met de sleutels van %payload (exacte set; volgorde zoals geleverd door de engine).
route POST user @name,email => $this->createUser
method createUser => dx(%payload->name, %payload->email)
Body-sleutels zijn niet gebonden als methodeparameters; je leest ze via
%payload.
5.5: Doelen
Lokale methode
route GET profile show => $this->show
method show => view($this->profile)
Externe klasse methode (statisch)
route GET api version $major => api::getVersion($major)
- Statische aanroepen: haakjes vereist, zelfs zonder argumenten.
- Geef padvariabelen expliciet door.
Wat een route kan retourneren
De dispatcher inspecteert de retourwaarde op precies één ding: false betekent "niet mijn route" en de matching gaat verder met de volgende kandidaat. Elke andere retourwaarde wordt genegeerd.
Les. De aanname "een route retourneert zijn responsbody" produceert
route GET hello => 'Hello': de route matcht en serveert een 200 met een lege pagina. Een route produceert output uitsluitend viaview(),apply(),output(),location()of de%resAPI.
Het false contract is ook een hulpmiddel: een catch-all route GET guide $slug die false retourneert voor onbekende slugs laat een letterlijke route in een later bestand (GET guide index.json) nog steeds dezelfde URL matchen.
5.6: De router activeren
Routes worden alleen gematcht na:
app::route()
Plaats deze aanroep bijvoorbeeld in app.phlo (of een andere centrale controller) na de initialisatie van je app en vóór een fallback voor 404-afhandeling.
5.7: Aanbevolen structuur
- Plaats routes bovenaan elk bestand.
-
Houd pad en methodenaam logisch uitgelijnd:
route GET users list => $this->listUsers route POST users add => $this->addUser - Geef altijd variabelen door in de target.
- Gebruik
bothalleen wanneer een endpoint opzettelijk zowel sync als async moet zijn. - Gebruik waardelijsten
:…in plaats van aparteiftakken voor vaste varianten.