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

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;
}

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