1: Inleiding

Phlo is een geïntegreerd platform met zijn eigen full-stack taal. Je schrijft .phlo bronbestanden; Phlo transpileert ze naar PHP, CSS en JavaScript die je kunt openen en lezen, met elke runtime-fout die terugwijst naar de .phlo regel die je hebt geschreven. Dezelfde taal heeft vier lagen: de taal zelf, het applicatieplatform (backend resources plus de phlo.js SPA-engine), het serverplatform (FrankenPHP, de Phlo Daemon, Phlo Realtime, Phlo WhatsApp) en het operations platform (de Phlo Dashboard). Deze gids behandelt ze allemaal. De productie-release draait op een gedeelde runtime, meestal in /opt/phlo/, terwijl elke app zijn eigen bron, data, gegenereerde PHP en webroot behoudt.

1.1: Filosofie

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 /opt/phlo
php /opt/phlo/install.php /var/www/example.nl/

De installer vraagt om een naam, host en doel, toont de runtime catalogus en laat je bronnen kiezen (hun @ requires worden automatisch inbegrepen), schrijft de entrypoint, data/app.json, data/app.md, een eerste route en .gitignore, en is pas klaar 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 /opt/phlo/install.php /var/www/example.nl/ && cd /var/www/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:

/var/www/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('/opt/phlo/phlo.php');
phlo_app (
	id: 'Example',
	host: 'dev.example.nl',
	auth: true,
	build: true,
	debug: true,
	app: '/var/www/example.nl/',
	data: '/var/www/example.nl/data/',
);

Release entrypoint in release/www/app.php:

<?php
require('/opt/phlo/phlo.php');
phlo_app (
	id: 'Example',
	host: 'stage.example.nl',
	app: '/var/www/example.nl/release/',
	php: '/var/www/example.nl/release/',
	data: '/var/www/example.nl/data/',
);

1.5: Build

Tijdens de ontwikkeling worden alle gewijzigde bronnen automatisch opnieuw opgebouwd bij elke aanvraag, dus een browserherlaad is alles wat een wijziging nodig heeft. De CLI geeft dezelfde build expliciet, voor scripts, CI en agents:

php www/app.php build::run
php www/app.php build::lint
php www/app.php build::release

build::run transpileert de ontwikkelingsuitvoer, 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 * /var/www/example.nl/release/www
	php_server
}

Voor Nginx:

root /var/www/example.nl/release/www;

location / {
	try_files $uri $uri/ /app.php?$query_string;
}

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