13: Appendices
These appendices give compact examples that match the production release.
13.1: Basic route with a view
prop title = 'Welcome'
route both GET => view($this)
view:
<main>
<h1>$this->title</h1>
</main>13.2: Route with a variable
route both GET product $id => $this->product($id)
method product($id){
$record = product::record(id: $id) ?? http_response_code(404)
view($this->productView, $record)
}
view productView($record):
<article>
<h1>$record->title</h1>
</article>13.3: Async form
route both GET contact => view($this)
route async POST contact @name,email,message => $this->send
method send {
%payload->name || error('Name is required')
return ['html' => ['#status' => 'Sent']]
}
view:
<form method=post action="/contact" class=async>
<input name=name>
<input name=email>
<textarea name=message></textarea>
<button>Send</button>
</form>
<p#status/>13.4: Minimal app.json
{
"resources": [
"payload",
"session",
"security/security",
"security/token",
"tag",
"phlo.async",
"DOM/form"
],
"release": "%app/release/"
}13.5: Dev entrypoint
<?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/',
);13.6: Release entrypoint
<?php
require('/srv/phlo/phlo.php');
phlo_app (
id: 'Example',
host: 'example.nl',
app: '/srv/example.nl/release/',
php: '/srv/example.nl/release/',
data: '/srv/example.nl/data/',
);