dev-master
9999999-devIO library for web and CLI applications.
Apache-2.0
The Requires
- php >=7.1
by Tamas Bolner
php cli web io content-type output-buffering
IO library for web and CLI applications.
An example of an I/O library. This project shows an alternative to handling output through the router framework. Most router frameworks expect the output to be passed back in the controllers in a "return" statement. Then for example they would convert the array to JSON., (*1)
In my opinion that solution becomes too problematic, when changes and new output modes are introduced later on to the project. Routing and IO are better be separated into 2 distinct libraries., (*2)
Functions:, (*3)
Request | Response |
---|---|
Request::getPostedJson(): array | Response::printJson(array $json, $http_status_code = 200) |
Request::getIntParameter(string $paramName): int | Response::bufferStart() |
Request::getFloatParameter(string $paramName): float | Response::bufferEndClean() |
Request::getStringParameter(string $paramName): string | Response::isBufferEnabled(): bool |
Request::getBoolParameter(string $paramName): bool | Response::JsonContentType($http_status_code = 200) |
Request::isParameterSet(string $paramName): bool | Response::HtmlContentType($http_status_code = 200) |
Request::getHttpRequestMethod(): string | Response::TextContentType($http_status_code = 200) |
For everything else, use the built-in functions of PHP., (*4)
Recommended IDE: PhpStorm, (*5)
Packagist page: https://packagist.org/packages/tbolner/flex-php-io, (*6)
<?php declare(strict_types=1); namespace MyProject; use FlexPhpIO\Response; Response::bufferStart(); Response::HtmlContentType(); echo '<html><body>Hello World!, (*7)
</body></html>';
<?php declare(strict_types=1); namespace MyProject; use FlexPhpIO\Request; use FlexPhpIO\Response; try { Response::bufferStart(); $input_data = Request::getPostedJson(); $message = @trim((string)$input_data["message"]); if ($message == "") { throw new \Exception("Missing or invalid 'message' field in input."); } Response::printJson([ "status" => "ok", "message" => $message ]); } catch (\Exception $ex) { Response::printJson([ "status" => "error", "message" => $ex->getMessage(); ], 400); }
An example for using it in a controller of FlexPhpRouter:, (*8)
<?php declare(strict_types=1); namespace MyProject\Controller; use FlexPhpRouter\Router; use FlexPhpIO\Response; Router::get( "items/{id:int}/info", function (int $id) { Response::printJson([ "item_id" => $id ]); } );
Notes: - When the output buffering is enabled, then you can change the headers any time, even after you have printed some output. - When the output buffering is disable, then you cannot change the headers anymore after data was written to the output. - In the FlexPhpRouter example, the output buffering should've already been set up in the main initialization file or entry point., (*9)
{ "require": { "tbolner/flex-php-io": "dev-master" } }
Then execute:, (*10)
composer update
This library requires PHP 7.1 or newer., (*11)
IO library for web and CLI applications.
Apache-2.0
php cli web io content-type output-buffering