Examples


Hello World

Минимальное приложение с поддержкой PSR-7 на Next2 выглядит так:


use PTS\Next2\Context\ContextInterface;
use PTS\Next2\MicroApp;
use PTS\Psr7\Response\JsonResponse;
use PTS\Psr7\ServerRequest;
use PTS\Psr7\Uri;

require_once '../../../vendor/autoload.php';

$psr7Request = new ServerRequest('GET', new Uri('/'));

$app = new MicroApp;

$app->store->get('/', function(ContextInterface $ctx) {
    $ctx->setResponse(new JsonResponse(['message' => 'Hello World!']));
});

$psr7Response = $app->handle($psr7Request); // psr-15 runner











 
 
 
 
 


Composition application (mount)

Приложения могут монтироваться друг в друга образуя композицию приложений. Это легко достигается 12 строчками кода (см PTS\Next\2CompositionMicroAppopen in new window);


use PTS\Next2\Extra\CompositionMicroApp;
use PTS\Next2\MicroApp;
use PTS\Psr7\Response\JsonResponse;
use PTS\Psr7\ServerRequest;
use PTS\Psr7\Uri;

require_once '../../../vendor/autoload.php';

$psr7Request = new ServerRequest('GET', new Uri('/api/v1/users/'));
$app = new CompositionMicroApp;

$apiAppV1 = new MicroApp;
$apiAppV1->store->get('/users/', fn($ctx) => $ctx->response = new JsonResponse(['v1' => 'users']));

$apiAppV2 = new MicroApp;
$apiAppV2->store->get('/users/', fn($ctx) => $ctx->response = new JsonResponse(['v2' => 'users']));

$reuseApp = new MicroApp;
$reuseApp->store->get('/users/', fn($ctx) => $ctx->response = new JsonResponse(['reuse' => 'users']));

$app->mount($apiAppV1, '/api/v1')
    ->mount($apiAppV2, '/api/v2')
    ->mount($reuseApp); // merge layers without prefix to app

$psr7Response = $app->handle($psr7Request);

Такой прием позволяет логически отделять код. Производить специфическую настройку для каждого приложений отдельно, например добавить для приложения apiV1 middleware, которая будет реаоизовывать обязательную авторизацию.