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:

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

Bekijk deze pagina als Markdown