tebe / http-factory
HTTP Factory provides automatic detection for Composer packages implementing the PSR-17 standard
Installs: 3 217
Dependents: 1
Suggesters: 0
Security: 0
Stars: 3
Watchers: 4
Forks: 2
Open Issues: 1
Requires
- php: >=8.0
- psr/http-factory: ^1.0
- psr/http-message: ^1.0
Requires (Dev)
- guzzlehttp/psr7: ^2.0
- laminas/laminas-diactoros: ^2.0
- nyholm/psr7: ^1.0
- nyholm/psr7-server: ^1.0
- phpunit/phpunit: ^9.0
- slim/slim: ^3.0
- squizlabs/php_codesniffer: ^3.0
This package is auto-updated.
Last update: 2024-08-10 21:55:24 UTC
README
HTTP-Factory is a PHP package that implements PSR-17 HTTP factories interface. It acts as a simple facade to provide easy access to concrete HTTP factory packets. As its main feature it offers support for auto-discovery of the supported factories.
All PSR-17 interfaces are implemented:
- Psr\Http\Message\ResponseFactoryInterface
- Psr\Http\Message\ServerRequestFactoryInterface
- Psr\Http\Message\StreamFactoryInterface
- Psr\Http\Message\UploadedFileFactoryInterface
- Psr\Http\Message\UriFactoryInterface
Additionally, it implements a createServerRequestFromGlobals method, which is not part of PSR-17.
Auto-discovering PSR-7 packages
The package features auto-discovery support for the following PSR-7 packages:
- laminas/laminas-diactoros
- guzzlehttp/psr7
- slim/slim
- nyholm/psr7
The auto-discovery mechanism assumes that you are using one (and only one) of the above PSR-7 packages in your project. The first detected PSR-17 package will then be used for all interface factory methods.
Installation
When starting a new project one of the following PSR-7 packages must be installed.
$ composer require laminas/laminas-diactoros $ composer require guzzlehttp/psr7 $ composer require slim/slim $ composer require nyholm/psr7
When using the "nyholm/psr7" package you have to require the "nyholm/psr7-server" package, too.
$ composer require nyholm/psr7-server
Then install the HTTP-Factory package.
$ composer require tebe/http-factory
You can now use HTTP-Factory in the codebase of your project like so:
use Tebe\HttpFactory\HttpFactory; $factory = new HttpFactory(); # creates a ResponseInterface $factory->createResponse(int $code = 200, string $reasonPhrase = ''); # creates a ServerRequestInterface $factory->createServerRequest(string $method, $uri, array $serverParams = []); # creates a ServerRequestInterface $factory->createServerRequestFromGlobals(); # creates a StreamInterface $factory->createStream(string $content = ''); # creates a StreamInterface $factory->createStreamFromFile(string $filename, string $mode = 'r'); # creates a StreamInterface $factory->createStreamFromResource($resource); # creates an UriInterface $factory->createUri(string $uri = ''); # creates an UploadedFileInterface $factory->createUploadedFile( StreamInterface $stream, int $size = null, int $error = \UPLOAD_ERR_OK, string $clientFilename = null, string $clientMediaType = null );
Usage
Using constructor
use Tebe\HttpFactory\HttpFactory; $factory = new HttpFactory(); $response = $factory->createResponse(200); echo $response->getStatusCode();
Using static instance method
use Tebe\HttpFactory\HttpFactory; $response = HttpFactory::instance()->createResponse(200); echo $response->getStatusCode();
Using own strategies
use Tebe\HttpFactory\HttpFactory; HttpFactory::setStrategies([ DiactorosFactory::class, GuzzleFactory::class, SlimFactory::class ]); $response = HttpFactory::instance()->createResponse(200); echo $response->getStatusCode();
Using own factory
use Tebe\HttpFactory\HttpFactory; use Tebe\HttpFactory\FactoryInterface; class MyFactory implements FactoryInterface { // implement interface methods } $factory = new HttpFactory(); $factory->setFactory(new MyFactory()); $response = $factory->createResponse(200); echo $response->getStatusCode();
Tests
Run PHPUnit:
$ composer phpunit
Run PHP_CodeSniffer:
$ composer phpcs
Run PHP Code Beautifier and Fixer:
$ composer phpcbf
Run PHPUnit and PHP_CodeSniffer together:
$ composer test
Suggestions
Any suggestions? Open an issue.