A Fast Forward service provider and helper-factory package for PSR-17 and PSR-7 HTTP objects, built on top of Nyholm PSR-7 and Nyholm ServerRequestCreator.
Designed to work out of the box with the php-fast-forward/container autowiring system.
composer require fast-forward/http-factory- Reuses one
Nyholm\Psr7\Factory\Psr17Factoryinstance for the standard PSR-17 interfaces - Registers
Nyholm\Psr7Server\ServerRequestCreatorand exposesServerRequestInterface::classviafromGlobals() - Exposes
FastForward\Http\Message\Factory\ResponseFactoryInterfacefor HTML, JSON, text, redirect, and no-content helpers - Exposes
FastForward\Http\Message\Factory\StreamFactoryInterfacefor payload-aware JSON stream helpers - Keeps returned objects PSR-7 compatible
There are two similarly named response and stream factory interfaces:
Psr\Http\Message\ResponseFactoryInterfaceandPsr\Http\Message\StreamFactoryInterfacefor plain PSR-17 behaviorFastForward\Http\Message\Factory\ResponseFactoryInterfaceandFastForward\Http\Message\Factory\StreamFactoryInterfacefor Fast Forward helper methods
If you’re using fast-forward/container:
use FastForward\Container\container;
use FastForward\Config\ArrayConfig;
use FastForward\Container\ContainerInterface;
$config = new ArrayConfig([
ContainerInterface::class => [
// Reference the service provider by class name
HttpMessageFactoryServiceProvider::class,
],
]);
$container = container($config);
$requestFactory = $container->get(Psr\Http\Message\RequestFactoryInterface::class);
$serverRequest = $container->get(Psr\Http\Message\ServerRequestInterface::class);
$responseFactory = $container->get(FastForward\Http\Message\Factory\ResponseFactoryInterface::class);
$streamFactory = $container->get(FastForward\Http\Message\Factory\StreamFactoryInterface::class);
$request = $requestFactory->createRequest('GET', '/health');
$jsonResponse = $responseFactory->createResponseFromPayload(['ok' => true]);
$htmlResponse = $responseFactory->createResponseFromHtml('<h1>Hello</h1>');
$redirectResponse = $responseFactory->createResponseRedirect('/login');
$noContentResponse = $responseFactory->createResponseNoContent();
$acceptedResponse = $responseFactory
->createResponse(202)
->withHeader('Content-Type', 'application/json; charset=utf-8')
->withBody($streamFactory->createStreamFromPayload(['queued' => true]));The following services will be automatically registered in your container when using HttpMessageFactoryServiceProvider:
| Service Interface | Implementation Source |
|---|---|
Psr\Http\Message\RequestFactoryInterface |
Nyholm\Psr7\Factory\Psr17Factory (via alias) |
Psr\Http\Message\ResponseFactoryInterface |
Nyholm\Psr7\Factory\Psr17Factory (via alias) |
Psr\Http\Message\ServerRequestFactoryInterface |
Nyholm\Psr7\Factory\Psr17Factory (via alias) |
Psr\Http\Message\StreamFactoryInterface |
Nyholm\Psr7\Factory\Psr17Factory (via alias) |
Psr\Http\Message\UploadedFileFactoryInterface |
Nyholm\Psr7\Factory\Psr17Factory (via alias) |
Psr\Http\Message\UriFactoryInterface |
Nyholm\Psr7\Factory\Psr17Factory (via alias) |
Nyholm\Psr7Server\ServerRequestCreatorInterface |
Nyholm\Psr7Server\ServerRequestCreator (via alias) |
FastForward\Http\Message\Factory\ResponseFactoryInterface |
FastForward\Http\Message\Factory\ResponseFactory (via alias) |
FastForward\Http\Message\Factory\StreamFactoryInterface |
FastForward\Http\Message\Factory\StreamFactory (via alias) |
Nyholm\Psr7\Factory\Psr17Factory |
Registered via InvokableFactory |
Nyholm\Psr7Server\ServerRequestCreator |
Registered via InvokableFactory, with dependencies |
FastForward\Http\Message\Factory\ResponseFactory |
Registered via InvokableFactory |
FastForward\Http\Message\Factory\StreamFactory |
Registered via InvokableFactory |
Psr\Http\Message\ServerRequestInterface |
Created by calling fromGlobals() on ServerRequestCreator via MethodFactory |
The Sphinx documentation under docs/ covers:
- beginner installation and quickstart flows
- concrete
ResponseFactoryandStreamFactoryclasses - common response and payload-stream scenarios
- alias mapping, compatibility, dependencies, and troubleshooting
This package is open-source software licensed under the MIT License.
Contributions, issues, and feature requests are welcome!
Feel free to open a GitHub Issue or submit a Pull Request.