78 lines
1.6 KiB
PHP
Executable File
78 lines
1.6 KiB
PHP
Executable File
<?php
|
|
|
|
class App {
|
|
|
|
static function dispatch($req) {
|
|
|
|
$apiroute = Routes::find_api($req->type(), $req->path());
|
|
if ($apiroute !== false) { // It is an API route. Treat it as such.
|
|
$req->set_route($apiroute);
|
|
$out = $apiroute->call($req);
|
|
header("Content-type: application/json");
|
|
if ($out instanceof Collection) {
|
|
print(json_encode($out->all()));
|
|
return;
|
|
}
|
|
if (is_array($out)) { // This is an array return type. Do things depending on the result key
|
|
|
|
$status = $out[0];
|
|
$data = $out[1];
|
|
if (count($out) > 2) {
|
|
$headers = $out[2];
|
|
} else {
|
|
$headers = [];
|
|
}
|
|
|
|
header("HTTP/1.1 $status");
|
|
foreach ($headers as $k=>$v) {
|
|
header("$k: $v");
|
|
}
|
|
if (is_array($data)) {
|
|
print(json_encode($data));
|
|
} else {
|
|
print($data);
|
|
}
|
|
return;
|
|
}
|
|
print(json_encode($out));
|
|
return;
|
|
}
|
|
|
|
$webroute = Routes::find_web($req->type(), $req->path());
|
|
if ($webroute !== false) { // It is a WEB route. Treat it as such.
|
|
$req->set_route($webroute);
|
|
$out = $webroute->call($req);
|
|
if (is_array($out)) { // This is an array return type. Do things depending on the result key
|
|
|
|
$status = $out[0];
|
|
$data = $out[1];
|
|
if (count($out) > 2) {
|
|
$headers = $out[2];
|
|
} else {
|
|
$headers = [];
|
|
}
|
|
|
|
header("HTTP/1.1 $status");
|
|
foreach ($headers as $k=>$v) {
|
|
header("$k: $v");
|
|
}
|
|
print($data);
|
|
return;
|
|
}
|
|
|
|
if ($out instanceof File) {
|
|
$out->set_header("Content-Length", $out->size());
|
|
$out->emit();
|
|
return;
|
|
}
|
|
|
|
print($out);
|
|
return;
|
|
}
|
|
|
|
header("HTTP/1.1 404 Not Found");
|
|
print(blade("404"));
|
|
|
|
}
|
|
}
|