10: Gereedschap & CLI
Phlo-apps hebben een CLI-laag voor build, lint, release en reflection. Gebruik het altijd via de dev entrypoint van de app.
10.1: Bouwopdrachten
php www/app.php build::run
php www/app.php build::lint
php www/app.php build::release
php www/app.php build::config
php www/app.php build::changed
build::lint zou een lege array moeten retourneren:
[]
Als lint fouten rapporteert, los de .phlo bron op en bouw opnieuw. Patch nooit de gegenereerde PHP.
10.2: Reflect opdrachten
Reflectie helpt je een app te begrijpen voordat je deze wijzigt:
php www/app.php reflect::context
php www/app.php reflect::compactRoutes
php www/app.php reflect::compactViews
php www/app.php reflect::resourceSummary
php www/app.php reflect::objectIndex
php www/app.php reflect::functionIndex
Deze commando's retourneren JSON en zijn bedoeld voor ontwikkelomgevingen met build: true.
Dezelfde introspectie stuurt de Graph view van het Phlo Control Center: elke klasse, resource en afhankelijkheidsrand van je app, live weergegeven vanuit reflect::graph:

10.3: Algemene CLI-dispatch
build:: en reflect:: zijn slechts twee voorbeelden van een algemener mechanisme. Phlo's CLI kan elke static, method of functie in je app aanroepen:
php www/app.php tasks::run # static method op een klasse
php www/app.php app.heartbeat # method op een Phlo instantie
php www/app.php answer "is een paling een vis" # globale functie
Drie patronen:
| Patroon | Dispatch | Voorbeeld |
|---|---|---|
Class::method args |
Static method op de klasse | tasks::run, backup::nightly |
object.method args |
Instantie method via phlo(object) |
app.heartbeat, cms.reindex |
function args |
Globale functie | answer "vraag" |
De output gaat naar stdout als JSON, fouten gaan naar stderr met een niet-nul exitcode. Dat maakt elke routine in je app direct bruikbaar vanuit cron, deploy scripts, monitoring of een terminal, zonder dat je een aparte CLI-laag hiervoor hoeft te bouwen.
Alleen beschikbaar met build: true in www/app.php. Voer het niet uit tegen een live productieomgeving.
10.4: Debug helpers
Met debug: true in phlo_app(...) activeert Phlo een set helpers voor inspectie tijdens de ontwikkeling. In productie zijn ze inert.
| Helper | Doel | Gedrag |
|---|---|---|
d(...$args) |
Waarden dumpen in de respons, doorgaan met uitvoeren | Verzameld in %res->dump; weergegeven in de browserconsole aan het einde van de aanvraag. Inert zonder debug: true |
dx(...$args) |
Dump + STOP | Sync: volledige debugpagina met het source-mapped .phlo bestand en regel. Async/CLI/streaming: de dump arriveert in de browserconsole via de apply payload. Worker-safe: gooit in plaats van die() aan te roepen |
debug($msg) |
Voeg een regel toe aan het debuglog; debug() zonder argumenten retourneert alles wat is verzameld |
Gelogd in de browserconsole met de aanvraagstatistieken |
error($msg, $code = 500) |
Runtime-fout voor de Phlo-exceptiehandler | Gooit een PhloException, gelogd in data/errors.json |
trace($node, $args) |
Handmatige traceer gebeurtenis (alleen actief met trace: true) |
Voegt een gebeurtenis toe aan het tracelog, zie het Trace-hoofdstuk |
De levenscyclus: helpers verzamelen tijdens de aanvraag (%res->dump, %res->debug); aan het einde van een sync-pagina logt een inline script alles naar de browserconsole samen met geheugen, duur en trace metadata, en async reacties dragen dezelfde gegevens in hun apply payload. Objecten worden uitgepakt via objInfo(). Runtime-fouten accumuleren in data/errors.json (bericht, source-mapped bestand en regel, aantal, laatste optreden); lees ze met reflect::errors of in het Phlo Control Center.
method buildReport {
$data = $this->load
debug('loaded', count: count($data))
if (!$data) error('No data to report')
dx($data[0])
}
dx() is je primaire "stop en kijk naar wat er is" tool tijdens de ontwikkeling. Vergeet je een dx() in de code die naar release gaat? In debug: false modus gedraagt het zich net als error(), geen stille doorgang.
10.5: Workflow
In een ontwikkelomgeving plaatst het Phlo Control Center (op /phlo) deze hele lus in de browser: source, build, release en fouten, met elk bestand één klik verwijderd:

- Lees eerst de source en de reflection output.
- Wijzig alleen
.phlo,data/app.jsonof entrypoints. - Voer
build::runuit. - Voer
build::lintuit. - Test de relevante HTTP routes.
- Voer
build::releaseuit wanneer de stage/release output moet worden bijgewerkt.
10.6: Ontwikkeling, staging en productie
Dev heeft doorgaans:
auth: true,
build: true,
debug: true,
In build+debug-modus bevindt de ingebouwde controle UI zich standaard op /phlo; gebruik control: 'path' in phlo_app(...) om een ander pad te kiezen. Stage/productie draait doorgaans zonder build en zonder debug. De webroot wijst naar release/www/.
10.7: KOP en async
De huidige runtime ondersteunt de normale HTTP-methoden, inclusief HEAD. Async verzoeken worden afgehandeld door de frontend resource en gebruiken dezelfde routes als sync verzoeken, tenzij je expliciet een andere route declareert.