Eine Website auf Phpanta folgt einem festen Aufbau, bindet das Framework als Git-Submodul ein und sagt ihm über eine einzige Klasse, was es über sie wissen muss.
site/├── autoload.php requires phpanta/autoload.php, maps the site's namespace, boots the app├── composer.json psr-4: the site's namespace → src/<Ns>/, and Phpanta\ → phpanta/src/├── public/index.php a last-resort handler, then <Site>::current()->run()├── src/<Ns>/ the app class, controllers, views, models, words├── data/ what the site reads at runtime, outside the webroot├── assets/ts/ the site's TypeScript; assets/ts/phpanta links to the framework's├── assets/css/ the site's stylesheet, as one @import manifest└── phpanta/ the framework, as a git submodule
Die URL ist relativ, also findet jedes Remote, auf das die Website gepusht wird, seine eigene Kopie des Frameworks direkt daneben. Das Framework an Ort und Stelle zu bearbeiten ist gewollt: Eine Änderung ist ein Commit in phpanta/, dann git add phpanta und ein Commit in der Website.
Eine Website ist eine Unterklasse von Phpanta\App, einmal pro Prozess von ihrem Autoloader gebootet. Sie schuldet dem Framework eine Handvoll Antworten:
Alles andere — wo data/ liegt, welches Verzeichnis der Webroot ist, wo die Update-Seriennummer liegt, das Fehlerlog, die Route zur API — leitet das Framework daraus ab, und diese Ableitungen sind final.
Eine Route verbindet einen Path-Case mit einem Controller, und der Controller liefert eine Antwort. Eine ViewResponse rendert ihre View in der Shell der App — oder, für eine Anfrage von Navigation, als Fragment, angeführt von ihrem Titel.
tsc# assets/ts/ → public/assets/js/node phpanta/tools/build-css.mjs # assets/css/main.css → public/assets/css/style.cssnode phpanta/tools/build-assets.mjs # the stamped AssetManifest the shell readsnode phpanta/tools/build-prod.mjs # build/dist/ — bundled, minified, no mapsphp-S localhost:8080 -t public phpanta/tools/dev-router.php
Die Build-Werkzeuge finden das Projekt, indem sie von dort, wo sie gestartet werden, zum nächsten composer.json hinaufsteigen, und lesen den Namespace der Website aus dessen psr-4.
Ein PHP-Host bekommt schlichte Dateien: phpanta/src/ und phpanta/autoload.php, src/ und autoload.php der Website und den Prod-Webroot — auf beliebigem Weg kopiert, oder als eine einzige signierte Anfrage durch den PushUpdate-Befehl des Frameworks geschickt. Ein statischer Host bekommt einen Export:
Jede Seite wird vom Controller ihrer eigenen Route gerendert — noch einmal in jeder Sprache, unter einer Adresse, die sie nennt —, jede Adresse wird unter den Basispfad verschoben, und der Export scheitert an jedem Link auf eine Seite, die er nicht geschrieben hat, oder auf einen Anker, den diese Seite nicht hat. Diese Website ist die Ausgabe dieses Befehls.