ctw / ctw-http
This package provides utility classes and constants to facilitate common operations of PSR-7 and a group of exceptions which represent HTTP status codes.
Installs: 91 602
Dependents: 5
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 1
Open Issues: 0
Requires
- php: ^8.3
- fig/http-message-util: ^1.1
Requires (Dev)
- ctw/ctw-qa: ^4.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.7
- phpstan/phpstan-phpunit: ^1.1
- phpstan/phpstan-strict-rules: ^1.3
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: ^3.6
- symfony/var-dumper: ^7.0
This package is auto-updated.
Last update: 2024-10-18 08:59:21 UTC
README
This repository holds utility classes and constants to facilitate common operations of PSR-7 and a group of exceptions which represent HTTP status codes.
Installation
Install by adding the package as a Composer requirement:
$ composer require ctw/ctw-http
Usage Examples
Returning an Entity
use Ctw\Http\HttpStatus; $httpStatus = new HttpStatus(HttpStatus::STATUS_NOT_FOUND); dump($httpStatus->get());
^ Ctw\Http\Entity\HttpStatus^ {#2 +statusCode: 404 +name: "Not Found" +phrase: "The requested resource could not be found but may be available again in the future." +exception: "Ctw\Http\HttpException\NotFoundException" +url: "https://httpstatuses.com/404" }
Throwing Exceptions
HttpException\*
Exceptions
use Ctw\Http\HttpException; throw new HttpException\NotFoundException();
PHP Fatal error: Uncaught Ctw\Http\HttpException\NotFoundException: 404 Not Found in /path/demo-usage.php:20 Stack trace: #0 {main} thrown in /path/demo-usage.php on line 20
HttpException\*
Exception with Custom Error Message
use Ctw\Http\HttpException; throw new HttpException\NotFoundException('Custom 404 error message');
PHP Fatal error: Uncaught Ctw\Http\HttpException\NotFoundException: Custom 404 error message in /path/demo-usage.php:21 Stack trace: #0 {main} thrown in /path/demo-usage.php on line 21
Catching Exceptions
All HttpException\*
Exceptions implement HttpException\HttpExceptionInterface
, therefore:
use Ctw\Http\HttpException; try { throw new HttpException\NotFoundException(); } catch (HttpException\HttpExceptionInterface $e) { dump($e->getStatusCode()); dump($e->getMessage()); }
The HttpException\*
hierarchy is:
use Ctw\Http\HttpException\HttpExceptionInterface; use Ctw\Http\HttpException\AbstractException; use Ctw\Http\HttpException\AbstractClientErrorException; use Ctw\Http\HttpException\AbstractServerErrorException; HttpExceptionInterface └── AbstractException ├── AbstractClientErrorException │ └── *Exception └── AbstractServerErrorException └── *Exception
List of HTTP Method Constants
The following are provided by PSR Http Message Util:
use Ctw\Http\HttpMethod; HttpMethod::METHOD_CONNECT; HttpMethod::METHOD_DELETE; HttpMethod::METHOD_GET; HttpMethod::METHOD_HEAD; HttpMethod::METHOD_OPTIONS; HttpMethod::METHOD_PATCH; HttpMethod::METHOD_POST; HttpMethod::METHOD_PURGE; HttpMethod::METHOD_PUT; HttpMethod::METHOD_TRACE;
List of HTTP Status Constants
The following are provided by PSR Http Message Util:
use Ctw\Http\HttpStatus; HttpStatus::STATUS_CONTINUE; HttpStatus::STATUS_SWITCHING_PROTOCOLS; HttpStatus::STATUS_PROCESSING; HttpStatus::STATUS_EARLY_HINTS; HttpStatus::STATUS_OK; HttpStatus::STATUS_CREATED; HttpStatus::STATUS_ACCEPTED; HttpStatus::STATUS_NON_AUTHORITATIVE_INFORMATION; HttpStatus::STATUS_NO_CONTENT; HttpStatus::STATUS_RESET_CONTENT; HttpStatus::STATUS_PARTIAL_CONTENT; HttpStatus::STATUS_MULTI_STATUS; HttpStatus::STATUS_ALREADY_REPORTED; HttpStatus::STATUS_IM_USED; HttpStatus::STATUS_MULTIPLE_CHOICES; HttpStatus::STATUS_MOVED_PERMANENTLY; HttpStatus::STATUS_FOUND; HttpStatus::STATUS_SEE_OTHER; HttpStatus::STATUS_NOT_MODIFIED; HttpStatus::STATUS_USE_PROXY; HttpStatus::STATUS_RESERVED; HttpStatus::STATUS_TEMPORARY_REDIRECT; HttpStatus::STATUS_PERMANENT_REDIRECT; HttpStatus::STATUS_BAD_REQUEST; HttpStatus::STATUS_UNAUTHORIZED; HttpStatus::STATUS_PAYMENT_REQUIRED; HttpStatus::STATUS_FORBIDDEN; HttpStatus::STATUS_NOT_FOUND; HttpStatus::STATUS_METHOD_NOT_ALLOWED; HttpStatus::STATUS_NOT_ACCEPTABLE; HttpStatus::STATUS_PROXY_AUTHENTICATION_REQUIRED; HttpStatus::STATUS_REQUEST_TIMEOUT; HttpStatus::STATUS_CONFLICT; HttpStatus::STATUS_GONE; HttpStatus::STATUS_LENGTH_REQUIRED; HttpStatus::STATUS_PRECONDITION_FAILED; HttpStatus::STATUS_PAYLOAD_TOO_LARGE; HttpStatus::STATUS_URI_TOO_LONG; HttpStatus::STATUS_UNSUPPORTED_MEDIA_TYPE; HttpStatus::STATUS_RANGE_NOT_SATISFIABLE; HttpStatus::STATUS_EXPECTATION_FAILED; HttpStatus::STATUS_IM_A_TEAPOT; HttpStatus::STATUS_MISDIRECTED_REQUEST; HttpStatus::STATUS_UNPROCESSABLE_ENTITY; HttpStatus::STATUS_LOCKED; HttpStatus::STATUS_FAILED_DEPENDENCY; HttpStatus::STATUS_TOO_EARLY; HttpStatus::STATUS_UPGRADE_REQUIRED; HttpStatus::STATUS_PRECONDITION_REQUIRED; HttpStatus::STATUS_TOO_MANY_REQUESTS; HttpStatus::STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE; HttpStatus::STATUS_UNAVAILABLE_FOR_LEGAL_REASONS; HttpStatus::STATUS_INTERNAL_SERVER_ERROR; HttpStatus::STATUS_NOT_IMPLEMENTED; HttpStatus::STATUS_BAD_GATEWAY; HttpStatus::STATUS_SERVICE_UNAVAILABLE; HttpStatus::STATUS_GATEWAY_TIMEOUT; HttpStatus::STATUS_VERSION_NOT_SUPPORTED; HttpStatus::STATUS_VARIANT_ALSO_NEGOTIATES; HttpStatus::STATUS_INSUFFICIENT_STORAGE; HttpStatus::STATUS_LOOP_DETECTED; HttpStatus::STATUS_NOT_EXTENDED; HttpStatus::STATUS_NETWORK_AUTHENTICATION_REQUIRED;
Please take a look at the /demo
directory for further examples.