An async framework in php, like koa in nodejs
This project is a translation of koa framework of nodejs.
$ composer require tbht/press
Press
use Press\Application;
use Press\Context;
$app = new Application();
$app->use(function (Context $ctx, callable $next) {
$ctx->body = 'Hello Press';
});
$app->listen();
Here is an example of logger middleware :
use Press\Context;
use Press\Application;
$app = new Application();
$app->use(function (Context $ctx, callable $next) {
$start = time();
return $next()
->then(function () use($start, $ctx) {
$ms = time() - $start;
$method = $ctx->method;
$url = $ctx->url;
print_r("{$method} {$url} - {$ms}ms");
});
});
use Press\Application;
use Press\Context;
$app = new Application();
$app->use(function (Context $ctx, callable $next) {
$ctx->body = 'Hello World';
});
$app->listen(function () {
var_dump('final var dump');
});
// or
$app->listen(['port' => 8080]);
use Press\Application;
use Press\Context;
$app = new Application();
// logger
$app->use(function (Context $ctx, callable $next) {
return $next()
->then(function () use ($ctx) {
$rt = $ctx->response->get('x-response-time');
$method = $ctx->method;
$url = $ctx->url;
echo "{$method} {$url} - {$rt}";
});
});
// x-response-time
$app->use(function (Context $ctx, callable $next) {
$start = time();
return $next()
->then(function () use ($ctx,$start) {
$ms = time() - $start;
$ctx->set('x-response-time', "{$ms}ms");
});
});
// response
$app->use(function (Context $ctx, callable $next) {
$ctx->body = 'Hello World';
});
$app->env
default to the ‘development’
$app->proxy
when true proxy header fields will be trusted
$app->subdomainOffset
offset of .subdomains
to ignore [2]
use Press\Application;
$app = new Application();
$app->listen([
"host" => "127.0.0.1",
"port" => 8080
]);
// or
$app->listen(function () {
echo "call back run";
});
return a callback function suitable for the following http server request.
use React\EventLoop\Factory;
$loop = Factory::create();
$server = new React\Http\Server($loop, function (Psr\Http\Message\ServerRequestInterface $request) {
// ...
});
see Middlware
part
$app->context
is the prototype from which ctx
is created.
$app->use(function ($ctx) {
$ctx->db = new DB();
});
$app->on("error", function () {
echo "this is an error";
});