2: Configuratie

data/app.json beschrijft de build: welke resources worden geladen, waar de release-uitvoer naartoe gaat, en welke resources alleen in release of alleen in dev horen.

2.1: Minimale configuratie

Resources verwijzen naar de Phlo runtime catalogus. Dat is frameworkcode, geen plek voor app-specifieke bestanden. Je schrijft appcode als .phlo in het app-pad; alleen generieke runtime-functionaliteit behoort opzettelijk in de catalogus.

2.2: Hulpmiddelen

Veelgebruikte bronnen:

Bron Doel
security/creds Referenties uit env- en ini-bestanden
security/security Beveiligingsheaders
security/token Token generatie
payload Lees POST, PUT, PATCH en uploads
session Sessieobject
cookies Cookie-object
DOM/form Asynchrone formulieren
phlo.async Asynchrone frontend verzoeken
visitors Heartbeat/bezoekers tracking
useragent User-agent parsing
DB/DB, DB/MySQL, DB/model Database en ORM

Gebruik alleen de bronnen die de app daadwerkelijk nodig heeft. Het Phlo Control Center kan beschikbare bronnen en afhankelijkheden tonen.

2.3: Dev uitsluiten

In een lokale dev-build wil je vaak bepaalde tracking- en realtimebronnen uitsluiten:

{
    "exclude": [
        "visitors",
        "useragent",
        "wsCast"
    ]
}

Dit geldt voor de dev-build. De release-build gebruikt deze uitsluiting niet automatisch; bezoekerstracking kan daar dus nog steeds actief zijn.

2.4: Release

De korte vorm is voldoende:

{
    "release": "%app/release/"
}

Phlo schrijft vervolgens release PHP naar release/ en webassets naar release/www/.

2.5: Paden

%app/ verwijst naar het app-pad van phlo_app(...). Houd de padconfiguratie in www/app.php en release/www/app.php zoveel mogelijk hetzelfde, zodat data/app.json betrekking heeft op het buildgedrag.

2.6: Namespaces en bundles

Elke <style> en <script> blok compileert naar een bundel per namespace. ns=docs komt terecht in www/docs.css en www/docs.js, ns=app,docs in beide bundels, en blokken zonder ns= in de standaard namespace. Een pagina selecteert zijn bundel met view(..., ns: 'docs').

Drie sleutels in data/app.json regelen dit:

{
    "defaultNS": "app,docs",
    "phloNS": ["app", "docs"],
    "iconNS": "app"
}

Twee regels houden een multi-namespace app gezond:

  1. Werk nooit om een ontbrekende runtime heen door defer: '/app.js' naar view() te sturen. Bij asynchrone navigatie die de bundel opnieuw in een pagina injecteert die er al een heeft, crasht het met dubbele declaraties. Configureer in plaats daarvan phloNS.
  2. Twee runtimes mogen nooit in één pagina samenkomen. Links die namespaces kruisen (een app pagina die naar een docs pagina linkt) moeten gewone links zijn, zodat de browser een volledige paginalading uitvoert. Alleen links binnen dezelfde namespace krijgen class=async voor SPA-navigatie.

2.7: Gegenereerde uitvoer

Bewerk deze bestanden niet met de hand:

php/
www/app.js
www/app.css
release/

Wijzig de .phlo bron, voer build::run uit, controleer met build::lint, en maak vervolgens een release met build::release.

2.8: Inloggegevens

De security/creds resource lost geheimen (API-sleutels, database-inloggegevens, webhook-tokens) en stelt ze bloot als %creds->.... Het leest uit twee bronnen, zodat dezelfde code op een laptop en in productie zonder aanpassingen draait.

Het INI-bestand data/creds.ini is de eenvoudigste bron. Houd het buiten versiebeheer. Een eenvoudig geheim is een top-level sleutel; een gestructureerd geheim is een sectie met sub-sleutels:

OpenAI = sk-...
Claude = sk-ant-...
Grok = xai-...

[mysql]
host = 127.0.0.1
database = app
user = app
password = secret

Je leest ze als %creds->OpenAI (een scalar) en %creds->mysql->host (genest).

Omgevingsvariabelen bieden dezelfde waarden zonder een bestand, wat geschikt is voor CI en containers. De prefix PHLO__ markeert een credential, en __ scheidt de geneste niveaus:

PHLO__OpenAI=sk-...
PHLO__mysql__host=127.0.0.1

Een host-gebonden vorm, PHLO_<HOST>__..., geldt alleen op een bijpassende host. <HOST> is de aanvraaghost in hoofdletters met elke niet-alfanumerieke omgezet in _, zodat factuur.software FACTUUR_SOFTWARE wordt:

PHLO_FACTUUR_SOFTWARE__OpenAI=sk-...

Bronnen worden in volgorde samengevoegd, waarbij elke de vorige overschrijft: eerst data/creds.ini, dan PHLO__ globals, en dan host-gebonden PHLO_<HOST>__ bovenop. Dus een host-gebonden variabele wint van een globale, die wint van het ini-bestand.

Een resource verklaart wat het nodig heeft met @ requires: creds:<name> (bijvoorbeeld creds:OpenAI, creds:mysql). Die regel is informatief: het documenteert de sleutel, het creëert deze niet. Waarden worden als gevoelig opgeslagen, zodat %creds ze maskeert in debug-uitvoer.

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