-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add core files to components directory, Add response class.
- Loading branch information
1 parent
42c3483
commit 5b45a0c
Showing
7 changed files
with
258 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,245 @@ | ||
<?php | ||
|
||
namespace App\Core\Components\Http; | ||
|
||
/** | ||
* Response Class | ||
* @package App\Core\Components\Http\Response | ||
*/ | ||
class Response | ||
{ | ||
public const HTTP_CONTINUE = 100; | ||
public const HTTP_SWITCHING_PROTOCOLS = 101; | ||
public const HTTP_PROCESSING = 102; // RFC2518 | ||
public const HTTP_EARLY_HINTS = 103; // RFC8297 | ||
public const HTTP_OK = 200; | ||
public const HTTP_CREATED = 201; | ||
public const HTTP_ACCEPTED = 202; | ||
public const HTTP_NON_AUTHORITATIVE_INFORMATION = 203; | ||
public const HTTP_NO_CONTENT = 204; | ||
public const HTTP_RESET_CONTENT = 205; | ||
public const HTTP_PARTIAL_CONTENT = 206; | ||
public const HTTP_MULTI_STATUS = 207; // RFC4918 | ||
public const HTTP_ALREADY_REPORTED = 208; // RFC5842 | ||
public const HTTP_IM_USED = 226; // RFC3229 | ||
public const HTTP_MULTIPLE_CHOICES = 300; | ||
public const HTTP_MOVED_PERMANENTLY = 301; | ||
public const HTTP_FOUND = 302; | ||
public const HTTP_SEE_OTHER = 303; | ||
public const HTTP_NOT_MODIFIED = 304; | ||
public const HTTP_USE_PROXY = 305; | ||
public const HTTP_RESERVED = 306; | ||
public const HTTP_TEMPORARY_REDIRECT = 307; | ||
public const HTTP_PERMANENTLY_REDIRECT = 308; // RFC7238 | ||
public const HTTP_BAD_REQUEST = 400; | ||
public const HTTP_UNAUTHORIZED = 401; | ||
public const HTTP_PAYMENT_REQUIRED = 402; | ||
public const HTTP_FORBIDDEN = 403; | ||
public const HTTP_NOT_FOUND = 404; | ||
public const HTTP_METHOD_NOT_ALLOWED = 405; | ||
public const HTTP_NOT_ACCEPTABLE = 406; | ||
public const HTTP_PROXY_AUTHENTICATION_REQUIRED = 407; | ||
public const HTTP_REQUEST_TIMEOUT = 408; | ||
public const HTTP_CONFLICT = 409; | ||
public const HTTP_GONE = 410; | ||
public const HTTP_LENGTH_REQUIRED = 411; | ||
public const HTTP_PRECONDITION_FAILED = 412; | ||
public const HTTP_REQUEST_ENTITY_TOO_LARGE = 413; | ||
public const HTTP_REQUEST_URI_TOO_LONG = 414; | ||
public const HTTP_UNSUPPORTED_MEDIA_TYPE = 415; | ||
public const HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416; | ||
public const HTTP_EXPECTATION_FAILED = 417; | ||
public const HTTP_I_AM_A_TEAPOT = 418; // RFC2324 | ||
public const HTTP_MISDIRECTED_REQUEST = 421; // RFC7540 | ||
public const HTTP_UNPROCESSABLE_ENTITY = 422; // RFC4918 | ||
public const HTTP_LOCKED = 423; // RFC4918 | ||
public const HTTP_FAILED_DEPENDENCY = 424; // RFC4918 | ||
public const HTTP_TOO_EARLY = 425; // RFC-ietf-httpbis-replay-04 | ||
public const HTTP_UPGRADE_REQUIRED = 426; // RFC2817 | ||
public const HTTP_PRECONDITION_REQUIRED = 428; // RFC6585 | ||
public const HTTP_TOO_MANY_REQUESTS = 429; // RFC6585 | ||
public const HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; // RFC6585 | ||
public const HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451; | ||
public const HTTP_INTERNAL_SERVER_ERROR = 500; | ||
public const HTTP_NOT_IMPLEMENTED = 501; | ||
public const HTTP_BAD_GATEWAY = 502; | ||
public const HTTP_SERVICE_UNAVAILABLE = 503; | ||
public const HTTP_GATEWAY_TIMEOUT = 504; | ||
public const HTTP_VERSION_NOT_SUPPORTED = 505; | ||
public const HTTP_VARIANT_ALSO_NEGOTIATES_EXPERIMENTAL = 506; // RFC2295 | ||
public const HTTP_INSUFFICIENT_STORAGE = 507; // RFC4918 | ||
public const HTTP_LOOP_DETECTED = 508; // RFC5842 | ||
public const HTTP_NOT_EXTENDED = 510; // RFC2774 | ||
public const HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511; // RFC6585 | ||
|
||
/** | ||
* @var string | ||
*/ | ||
public $headers; | ||
|
||
/** | ||
* @var string $charset | ||
*/ | ||
protected $charset = 'utf-8'; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $content; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $version = '1.1'; | ||
|
||
/** | ||
* @var int | ||
*/ | ||
protected $status_code; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $status_text; | ||
|
||
/** | ||
* Status codes translation table. | ||
* | ||
* Unless otherwise noted, the status code is defined in RFC2616. | ||
* | ||
* @var array | ||
*/ | ||
public static $status_texts = [ | ||
100 => 'Continue', | ||
101 => 'Switching Protocols', | ||
102 => 'Processing', // RFC2518 | ||
103 => 'Early Hints', | ||
200 => 'OK', | ||
201 => 'Created', | ||
202 => 'Accepted', | ||
203 => 'Non-Authoritative Information', | ||
204 => 'No Content', | ||
205 => 'Reset Content', | ||
206 => 'Partial Content', | ||
207 => 'Multi-Status', // RFC4918 | ||
208 => 'Already Reported', // RFC5842 | ||
226 => 'IM Used', // RFC3229 | ||
300 => 'Multiple Choices', | ||
301 => 'Moved Permanently', | ||
302 => 'Found', | ||
303 => 'See Other', | ||
304 => 'Not Modified', | ||
305 => 'Use Proxy', | ||
307 => 'Temporary Redirect', | ||
308 => 'Permanent Redirect', // RFC7238 | ||
400 => 'Bad Request', | ||
401 => 'Unauthorized', | ||
402 => 'Payment Required', | ||
403 => 'Forbidden', | ||
404 => 'Not Found', | ||
405 => 'Method Not Allowed', | ||
406 => 'Not Acceptable', | ||
407 => 'Proxy Authentication Required', | ||
408 => 'Request Timeout', | ||
409 => 'Conflict', | ||
410 => 'Gone', | ||
411 => 'Length Required', | ||
412 => 'Precondition Failed', | ||
413 => 'Content Too Large', // RFC-ietf-httpbis-semantics | ||
414 => 'URI Too Long', | ||
415 => 'Unsupported Media Type', | ||
416 => 'Range Not Satisfiable', | ||
417 => 'Expectation Failed', | ||
418 => 'I\'m a teapot', // RFC2324 | ||
421 => 'Misdirected Request', // RFC7540 | ||
422 => 'Unprocessable Content', // RFC-ietf-httpbis-semantics | ||
423 => 'Locked', // RFC4918 | ||
424 => 'Failed Dependency', // RFC4918 | ||
425 => 'Too Early', // RFC-ietf-httpbis-replay-04 | ||
426 => 'Upgrade Required', // RFC2817 | ||
428 => 'Precondition Required', // RFC6585 | ||
429 => 'Too Many Requests', // RFC6585 | ||
431 => 'Request Header Fields Too Large', // RFC6585 | ||
451 => 'Unavailable For Legal Reasons', // RFC7725 | ||
500 => 'Internal Server Error', | ||
501 => 'Not Implemented', | ||
502 => 'Bad Gateway', | ||
503 => 'Service Unavailable', | ||
504 => 'Gateway Timeout', | ||
505 => 'HTTP Version Not Supported', | ||
506 => 'Variant Also Negotiates', // RFC2295 | ||
507 => 'Insufficient Storage', // RFC4918 | ||
508 => 'Loop Detected', // RFC5842 | ||
510 => 'Not Extended', // RFC2774 | ||
511 => 'Network Authentication Required', // RFC6585 | ||
]; | ||
|
||
public function __construct(?string $content = '', int $status = 200, string $headers = '') | ||
{ | ||
$this->content = $content; | ||
$this->status_code = $status; | ||
$this->headers = $headers; | ||
} | ||
|
||
public function __toString() | ||
{ | ||
return sprintf('HTTP/%s %s %s', $this->version, $this->status_code, $this->status_text) . "\r\n" . | ||
$this->headers . "\r\n" . | ||
$this->getContent(); | ||
} | ||
|
||
public function setStatusCode(int $status): Response | ||
{ | ||
$this->status_code = $status; | ||
|
||
return $this; | ||
} | ||
|
||
public function getStatusCode(): int | ||
{ | ||
return $this->status_code; | ||
} | ||
|
||
public function setCharset(string $charset): Response | ||
{ | ||
$this->charset = $charset; | ||
|
||
return $this; | ||
} | ||
|
||
public function getCharset(): string | ||
{ | ||
return $this->charset; | ||
} | ||
|
||
public function setContent(?string $content): Response | ||
{ | ||
$this->content = $content ?? ''; | ||
|
||
return $this; | ||
} | ||
|
||
public function getContent(): string | ||
{ | ||
return $this->content; | ||
} | ||
|
||
/** | ||
* Json encode | ||
* | ||
* @param $data | ||
* @throws RuntimeException | ||
* @return string|null | ||
*/ | ||
public function jsonEncode($data): ?string | ||
{ | ||
return json_encode($data, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT); | ||
} | ||
|
||
public function setHeader(string $header): Response | ||
{ | ||
$this->headers = header("Content-Type: $header"); | ||
|
||
return $this; | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
app/Core/Routing/Route.php → app/Core/Components/Routing/Route.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
<?php | ||
|
||
namespace App\Core\Routing; | ||
namespace App\Core\Components\Routing; | ||
|
||
class Route | ||
{ | ||
|
6 changes: 3 additions & 3 deletions
6
app/Core/Routing/Router.php → app/Core/Components/Routing/Router.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters