f3-factory/fatfree-psr7
PSR-7 HTTP message implementation for the Fat-Free Framework (F3). Provides request/response and stream factories to bridge F3 apps with PSR-7 compatible middleware and libraries, helping standardize HTTP handling without leaving the F3 ecosystem.
Start by installing the package via Composer:
composer require f3-factory/fatfree-psr7
In your F3 application (index.php or bootstrap file), import the RequestFactory and ResponseFactory classes. Use them early in the request lifecycle—after F3 has populated its global state ($_GET, $_POST, etc.)—to generate PSR-7 objects:
$f3 = require 'lib/base.php';
use FatFreePSR7\RequestFactory;
use FatFreePSR7\ResponseFactory;
$request = (new RequestFactory())->createFromF3();
$response = (new ResponseFactory())->create();
Your first practical use case: passing $request into middleware stacks (e.g., slim/psr7-compatible routing or authentication middleware) that expect a ServerRequestInterface.
RequestFactory to wrap incoming F3 requests into PSR-7 objects for libraries like nyholm/psr7, guzzlehttp/psr7, or Slim’s PSR-7 bridge. Example:
$psrRequest = (new RequestFactory())->createFromF3();
$psrResponse = $someMiddleware($psrRequest, new Response());
// Map back to F3 response if needed
$f3->set('response.body', $psrResponse->getBody());
$f3->status($psrResponse->getStatusCode());
ServerRequestInterface instances programmatically instead of relying on F3 globals:
$request = (new RequestFactory())->createServerRequest('GET', '/api/users', ['HTTP_HOST' => 'example.com']);
$f3->route('GET /users', function() {
$request = (new RequestFactory())->createFromF3();
$response = $this->userController->listUsers($request);
return $response->getBody();
});
createFromF3() after F3’s boot process populates its internal $_GET, $_POST, $_COOKIE, etc. Calling too early (e.g., before $f3->run()) may yield incomplete data.getHeaderLine() consistently.$response (e.g., $response->withStatus(404)), ensure you assign the result back:
$response = $response->withStatus(404); // correct
createFromF3() reads php://input fully into memory. For large payloads, implement a custom StreamFactory or stream the raw php://input yourself.RequestFactory/ResponseFactory—e.g., inject custom UriFactory for F3’s BASE-aware URI building.var_dump($request->getHeaders()) in development to inspect how F3 globals map to headers (e.g., HTTP_X_FORWARDED_PROTO → uri->getScheme()).How can I help you explore Laravel packages today?