|
- <?php
-
- declare(strict_types=1);
-
- namespace Core;
-
- class Response
- {
- protected string $content;
- protected int $status;
- protected array $headers;
-
- public function __construct(string $content = '', int $status = 200, array $headers = [])
- {
- $this->content = $content;
- $this->status = $status;
- $this->headers = $headers;
- }
-
- public static function json(array $data, int $status = 200): self
- {
- return new self(
- json_encode($data, JSON_PRETTY_PRINT),
- $status,
- ['Content-Type' => 'application/json']
- );
- }
-
- public static function redirect(string $url): self
- {
- return new self('', 302, ['Location' => $url]);
- }
-
- public static function notFound(string $message = 'Not found'): self
- {
- return new self($message, 404);
- }
-
- public static function serverError(string $message = 'Server error'): self
- {
- return new self($message, 500);
- }
-
- public function send(): void
- {
- // Flush session to disk before sending headers so it is persisted before
- // the browser follows any redirect (critical for OAuth state survival).
- if (session_status() === PHP_SESSION_ACTIVE) {
- session_write_close();
- }
-
- http_response_code($this->status);
-
- foreach ($this->headers as $name => $value) {
- header($name . ': ' . $value);
- }
-
- echo $this->content;
- }
-
- public function content(): string
- {
- return $this->content;
- }
-
- public function status(): int
- {
- return $this->status;
- }
- }
|