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.
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.
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
);
use Tebe\HttpFactory\HttpFactory;
$factory = new HttpFactory();
$response = $factory->createResponse(200);
echo $response->getStatusCode();
use Tebe\HttpFactory\HttpFactory;
$response = HttpFactory::instance()->createResponse(200);
echo $response->getStatusCode();
use Tebe\HttpFactory\HttpFactory;
HttpFactory::setStrategies([
DiactorosFactory::class,
GuzzleFactory::class,
SlimFactory::class
]);
$response = HttpFactory::instance()->createResponse(200);
echo $response->getStatusCode();
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();
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
Any suggestions? Open an issue.