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

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->saveItems

5.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)

4.3.3 Rest (variabele lengte) met =*

route GET file $path=* => $this->serveFile($path)

4.3.4 Standaardwaarde met =

route GET page $slug=home => $this->page($slug)

4.3.5 Lengte-eis met .N

route GET code $pin.6 => $this->enter($pin)

4.3.6 Waardenlijsten met :a,b,c

route GET report $range:daily,weekly,monthly => $this->report($range)

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)

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 via view(), apply(), output(), location() of de %res API.

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

We gebruiken essentiële cookies om deze site te laten werken. Met uw toestemming gebruiken we ook analytics om de site te verbeteren.