1: Inleiding
Phlo is een geïntegreerd platform met zijn eigen full-stack taal. Je schrijft .phlo bronbestanden; Phlo compileert ze naar PHP, CSS en JavaScript die je kunt openen en lezen, met elke runtime-fout die terugwijst naar de .phlo regel die je schreef. Dezelfde taal heeft vier lagen: de taal zelf, het applicatieplatform (backend resources plus de phlo.js SPA-engine), het serverplatform (FrankenPHP, phloWS, phloWA) en het operations platform (de Phlo Dashboard). Deze gids behandelt ze allemaal. De productie-release draait op een gedeelde runtime, meestal in /srv/phlo/, terwijl elke app zijn eigen bron, gegevens, gegenereerde PHP en webroot behoudt.
1.1: Filosofie
- Bron eerst: je werkt in
.phlo, niet in gegenereerde PHP, CSS of JavaScript. - Een kleine runtime: het webtoegangspunt laadt
/srv/phlo/phlo.phpen start de app metphlo_app(...). - Expliciete runtimebronnen:
data/app.jsonselecteert welke Phlo bronnen een app laadt uit de runtimecatalogus; appcode blijft in de app. - Dev en release gescheiden: dev builds, debugt en kan auth gebruiken; release gebruikt de gegenereerde output.
- HTML, routes en gedrag dicht bij elkaar: een route, view, stijl of script kan in hetzelfde onderwerp bestand leven wanneer dat de app duidelijker maakt.
1.2: Installatie
Phlo vereist PHP 8.3 of hoger; de CLI build draait op dezelfde PHP. Voor productie is FrankenPHP de aanbevolen runtime (ingebouwde webserver, worker modus); klassieke PHP-FPM achter Nginx werkt ook.
Haal de runtime op en scaffold je eerste app met de meegeleverde installer:
git clone https://github.com/q-ainl/phlo.git /srv/phlo
php /srv/phlo/install.php /srv/example.nl/
De installer vraagt om een naam, host en doel, toont de runtime catalogus en laat je resources kiezen (hun @ requires worden automatisch inbegrepen), schrijft de entrypoint, data/app.json, data/app.md, een eerste route en .gitignore, en eindigt pas na een schone build met concrete volgende stappen.
Geef je de voorkeur aan een kopie die zichzelf opruimt? Kopieer install.php naar de nieuwe app directory en voer het daar uit; na een succesvolle installatie verwijdert het zichzelf:
cp /srv/phlo/install.php /srv/example.nl/ && cd /srv/example.nl && php install.php
De volgende secties beschrijven wat de installer voor je instelt, en hoe je hetzelfde handmatig kunt bouwen.
1.3: Projectstructuur
Een typische app:
/srv/example.nl/
app.phlo
page.home.phlo
data/
app.json
auth.ini
creds.ini
php/
app.php
classmap.php
release/
www/
app.php
www/
app.php
php/, www/app.js, www/app.css en release/ zijn buildoutput. Wijzig ze alleen via de bron en bouw opnieuw.
1.4: Toegangspunt
Dev entrypoint in www/app.php:
<?php
require('/srv/phlo/phlo.php');
phlo_app (
id: 'Example',
host: 'dev.example.nl',
auth: true,
build: true,
debug: true,
app: '/srv/example.nl/',
data: '/srv/example.nl/data/',
);
Release entrypoint in release/www/app.php:
<?php
require('/srv/phlo/phlo.php');
phlo_app (
id: 'Example',
host: 'stage.example.nl',
app: '/srv/example.nl/release/',
php: '/srv/example.nl/release/',
data: '/srv/example.nl/data/',
);1.5: Build
Gebruik de CLI vanaf het dev entrypoint:
php www/app.php build::run
php www/app.php build::lint
php www/app.php build::release
build::run transpileert de dev-uitvoer, build::lint controleert de gegenereerde PHP, en build::release schrijft de release-uitvoer.
1.6: Webserver
De webserver wijst naar www/ voor ontwikkeling en naar release/www/ voor stage/productie. Onbekende paden worden herschreven naar app.php.
Voor FrankenPHP (aanbevolen) is een enkele Caddyfile-blok voldoende:
example.nl {
root * /srv/example.nl/release/www
php_server
}
Voor Nginx:
root /srv/example.nl/release/www;
location / {
try_files $uri $uri/ /app.php?$query_string;
}