Concepten
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:
- Subdomeinmap. Op een subdomein zoals
docs.example.comwordt eerst de mapext/uri/(subdomain-docs)/geprobeerd. - Statische route. Een map waarvan het pad gelijk is aan het adres, met een
index.tpl:/aboutisext/uri/about/index.tpl. Die wordt direct gevonden; er komt geen routetabel aan te pas. - Dynamische route. Een map met een segment tussen haakjes, zoals
ext/uri/projects/(slug)/. Deroute.incervan controleert de waarden in het adres en roeptrouter_accept()aan als het adres geldig is. Anders wordt de volgende route geprobeerd. - Niet gevonden. Een
404-pagina, die een project kan vervangen door een eigenext/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 en Wat een route teruggeeft.
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.