ez-php / psr-bridge
Adapters between ez-php HTTP/logging types and PSR-7, PSR-15, PSR-17 and PSR-3
Requires
- php: ^8.5
- ez-php/contracts: ^2.6.0
- ez-php/http: ^2.6.2
- psr/http-factory: ^1.1
- psr/http-message: ^2.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- ez-php/docker: ^2.6.0
- ez-php/logging: ^2.6.0
- friendsofphp/php-cs-fixer: ^3.94
- nyholm/psr7: ^1.8
- phpstan/phpstan: ^2.1
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^13.0
- psr/log: ^3.0
Suggests
- ez-php/logging: Needed for Log\PsrLogger / Log\EzLogger (PSR-3 adapters)
- psr/log: Needed for Log\PsrLogger / Log\EzLogger (PSR-3 adapters)
Provides
None
Conflicts
None
Replaces
None
README
Adapters between ez-php's HTTP and logging types and the PSR standards: PSR-7 request/response conversion, PSR-15 middleware in both directions, and PSR-3 loggers in both directions. Bring your own PSR-7 implementation; this package ships none.
Installation
composer require ez-php/psr-bridge composer require nyholm/psr7 # or any other PSR-7 + PSR-17 implementation composer require ez-php/logging psr/log # only for the PSR-3 adapters
Converting requests and responses
use EzPhp\PsrBridge\Http\RequestConverter; use EzPhp\PsrBridge\Http\ResponseConverter; use Nyholm\Psr7\Factory\Psr17Factory; $psr17 = new Psr17Factory(); $requests = new RequestConverter($psr17, $psr17, $psr17); // server-request, stream, uploaded-file factories $responses = new ResponseConverter($psr17, $psr17); // response, stream factories $psrRequest = $requests->toPsr($request); // ez Request → ServerRequestInterface $request = $requests->fromPsr($psrRequest); // and back $psrResponse = $responses->toPsr($response); // ez response → ResponseInterface $response = $responses->fromPsr($psrResponse); // and back
- Route params become request attributes, and attributes become route params.
- Cookies become
Set-Cookieheaders, which are parsed back into cookies on the way in. - Streamed responses (e.g. downloads) are buffered. An SSE response (
text/event-stream) throws aBridgeException, because an event stream may never end. - Only ez-php/http's
Requestconverts. OtherRequestInterfaceimplementations throw.
Using a PSR-15 middleware in ez-php
use EzPhp\PsrBridge\Http\PsrMiddleware; $middleware = new PsrMiddleware(new SomeVendorPsr15Middleware(), $requests, $responses); // $middleware implements EzPhp\Contracts\MiddlewareInterface
ez-php registers middleware by class name, so wrap it in a small application middleware class (or bind one in the container) that constructs the PsrMiddleware.
The reverse, an ez-php middleware in a PSR-15 stack: new EzMiddleware($ezMiddleware, $requests, $responses).
Loggers
use EzPhp\PsrBridge\Log\EzLogger; use EzPhp\PsrBridge\Log\PsrLogger; $psrLogger = new PsrLogger($ezLogger); // give a PSR-3-typed library an ez-php logger $ezLogger = new EzLogger($monolog); // route ez-php logging into Monolog (or any PSR-3 logger)
PSR-3 has eight levels, ez-php five: emergency/alert map to critical, notice to info.
Requirements
Uses the bulk accessors on EzPhp\Http\Request (headers(), queryParams(), bodyParams(), cookies(), serverParams(), params(), files()) and UploadedFile::tmpName(). These need an ez-php/http release that includes them.
License
MIT