tbht/press

a frame like nodejs/koa

v0.3.0 2021-03-30 07:52 UTC

README

PHP Composer codecov

This project is a translation of koa framework of nodejs.

Installation

$ composer require tbht/press

Hello Press

use Press\Application;
use Press\Context;

$app = new Application();

$app->use(function (Context $ctx, callable $next) {
    $ctx->body = 'Hello Press';
});

$app->listen();

Middleware

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");        
        });
});

Document

Application

hello world

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]);

Cascading

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';
});

Settings

  • $app->env default to the 'development'

  • $app->proxy when true proxy header fields will be trusted

  • $app->subdomainOffset offset of .subdomains to ignore [2]

$app->listen(...)

use Press\Application;

$app = new Application();

$app->listen([
    "host" => "127.0.0.1",
    "port" => 8080
]);

// or 

$app->listen(function () {
    echo "call back run";
});

$app->callback()

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) {
    
    // ...  

});

$app->use()

see Middlware part

$app->context

$app->context is the prototype from which ctx is created.

$app->use(function ($ctx) { 

$ctx->db = new DB();

});

Error handling

$app->on("error", function () {

    echo "this is an error";
});

Context