# Levensloop van een request

Hoe een request zijn route vindt, zijn antwoord samenstelt en alleen laadt wat het gebruikt.

Elk request dat geen statisch bestand is, gaat naar `index.php`. Vanaf daar vindt Nimbly de route voor het adres, draait de template ervan, en laadt alleen de bouwstenen die die template aanroept.

## 1. Binnenkomst

De webserver levert gebouwde assets, statische bestanden en verkleinde afbeeldingen direct. Al het andere gaat naar `index.php`, dat het gevraagde pad leest, de instellingen uit `.env` laadt, de instellingen voor vertrouwde proxy's toepast en de requeststatistieken start. Invoer van het request wordt geëscaped voordat een template hem ziet.

## 2. De route vinden

Het pad wordt in deze volgorde gezocht:

1. **Subdomeinmap.** Op een subdomein zoals `docs.example.com` wordt eerst de map `ext/uri/(subdomain-docs)/` geprobeerd.
2. **Statische route.** Een map waarvan het pad gelijk is aan het adres, met een `index.tpl`: `/about` is `ext/uri/about/index.tpl`. Die wordt direct gevonden; er komt geen routetabel aan te pas.
3. **Dynamische route.** Een map met een segment tussen haakjes, zoals `ext/uri/projects/(slug)/`. De `route.inc` ervan controleert de waarden in het adres en roept `router_accept()` aan als het adres geldig is. Anders wordt de volgende route geprobeerd.
4. **Niet gevonden.** Een `404`-pagina, die een project kan vervangen door een eigen `ext/uri/errors/404/`.

Binnen elke stap wordt `ext/` doorzocht vóór `core/` en de modules. Een eigen route met hetzelfde pad vervangt een route van het framework.

## 3. Het antwoord samenstellen

De `index.tpl` van de route draait. Voor een HTML-pagina zet die meestal een paar paginavariabelen en eindigt met `[#html#]`, de pagina-shell. De shell maakt de head van het document, `header.tpl`, `main.tpl` en `footer.tpl` uit de map van de route, en de scripts en bewerktools voor ingelogde redacteuren.

Een route kan net zo goed iets anders maken: een eigen compleet HTML-document, JSON, XML, platte tekst, een CSV-export of een PDF. Zie [Je eigen HTML](/nl/docs/guides/html-shell/) en [Wat een route teruggeeft](/nl/docs/guides/responses/).

## 4. Alleen wat de route gebruikt

Templates roepen shortcodes aan: `[#data#]`, `[#repeat#]`, `[#site-header#]`, `[#prepare-projects#]`. Een shortcode wordt opgezocht op het moment dat hij wordt aangeroepen. Nimbly vindt de template of library bij zijn naam, in `ext/` en daarna in `core/`, en laadt hem op dat moment. Een pagina zonder formulieren laadt nooit de formuliercode; een pagina zonder afbeeldingen laadt nooit de afbeeldingscode.

Data werkt op dezelfde manier. `[#data projects#]` leest de projects-resource via de datalaag, die queryresultaten en lijstindexen in een cache bewaart die bij elke schrijfactie vervalt. Een detailpagina zoekt een record op via een index in plaats van de hele resource te lezen.

Het resultaat: het werk voor een request volgt uit wat de route echt gebruikt, niet uit alles wat het framework kan.

## 5. Toegang

Rechten worden gecontroleerd waar data wordt gelezen of gewijzigd. De admin en de API controleren voor elke handeling de rol van de ingelogde gebruiker of het API-token. In je eigen routes valideert `route.inc` het adres, en controleert een template of library de toegang voordat hij beschermde data toont. Zie [Gebruikers en rechten](/nl/docs/guides/permissions/).
