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\2CompositionMicroApp);
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, которая будет реаоизовывать обязательную авторизацию.