withUri($_msg->getUri()->withPath(trim_prefix( $_msg->getUri()->getPath(), "/api") )); function msg():Message { global $_msg; return $_msg; } function _route($path,$handler,$filter=null) { global $_routing_table; $_routing_table[] = [$path,$filter,$handler]; } function _methodfn($method) { return function($path, $handler) use ($method) { _route( $path, $handler, fn() => mb_strtolower(msg()->getMethod()) == mb_strtolower($method), ); }; } function dispatch() { global $_routing_table; foreach ($_routing_table as $value) { if ((!is_null($value[1])) && (!$value[1]())) { continue; } if (preg_match("|" . $value[0] . "|i", msg()->getUri()->getPath(), )) { try { $value[2](); } catch (Exception $e) { echo 'exceptional error: ', $e->getMessage(), "\n"; } break; } http_response_code(404); } } ?>