107 lines
2.5 KiB
PHP
107 lines
2.5 KiB
PHP
<?php
|
|
namespace Blog\Http;
|
|
|
|
/**
|
|
* Stellt eine HTTP-Request-Objektklasse bereit.
|
|
*
|
|
* Kapselt HTTP-Methoden, Pfad, POST-Daten, Header und Rohdatenzugriff.
|
|
*/
|
|
class Request {
|
|
private string $method;
|
|
private string $path;
|
|
private array $postData;
|
|
|
|
/**
|
|
* Konstruktor für das Request-Objekt.
|
|
*
|
|
* @param string $method HTTP-Methode (z.B. GET, POST)
|
|
* @param string $uri URI der Anfrage
|
|
* @param array $postData Optional: POST-Daten (Standard: $_POST)
|
|
*/
|
|
public function __construct(string $method, string $uri, array $postData = []) {
|
|
$this->method = strtoupper($method);
|
|
$this->path = parse_url($uri, PHP_URL_PATH) ?? '/';
|
|
$this->postData = $postData ?: $_POST;
|
|
}
|
|
|
|
/**
|
|
* Gibt die HTTP-Methode zurück.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getMethod(): string {
|
|
return $this->method;
|
|
}
|
|
|
|
/**
|
|
* Gibt den Pfad der Anfrage zurück.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getPath(): string {
|
|
return $this->path;
|
|
}
|
|
|
|
/**
|
|
* Gibt einen POST-Wert anhand des Schlüssels zurück.
|
|
*
|
|
* @param string $key Schlüssel im POST-Array
|
|
* @param mixed $default Optionaler Standardwert
|
|
* @return mixed
|
|
*/
|
|
public function getPost(string $key, $default = null): mixed {
|
|
return $this->postData[$key] ?? $default;
|
|
}
|
|
|
|
/**
|
|
* Gibt alle POST-Daten als Array zurück.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function allPost(): array {
|
|
return $this->postData;
|
|
}
|
|
|
|
/**
|
|
* Gibt einen Query-Parameter anhand des Schlüssels zurück.
|
|
*
|
|
* @param string $key Schlüssel im Query-String
|
|
* @param mixed $default Optionaler Standardwert
|
|
* @return mixed
|
|
*/
|
|
public function getQuery(string $key, $default = null): mixed {
|
|
$query = [];
|
|
parse_str(parse_url($this->path, PHP_URL_QUERY) ?? '', $query);
|
|
return $query[$key] ?? $default;
|
|
}
|
|
|
|
/**
|
|
* Gibt einen HTTP-Header zurück.
|
|
*
|
|
* @param string $key Header-Name (z.B. 'Content-Type')
|
|
* @return string|null
|
|
*/
|
|
public function getHeader(string $key): ?string {
|
|
$headerKey = 'HTTP_' . strtoupper(str_replace('-', '_', $key));
|
|
return $_SERVER[$headerKey] ?? null;
|
|
}
|
|
|
|
/**
|
|
* Gibt den rohen Anfrage-Body zurück.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getRawInput(): string {
|
|
return file_get_contents('php://input');
|
|
}
|
|
|
|
/**
|
|
* Gibt den Anfrage-Body als assoziatives Array zurück (JSON).
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getJson(): array {
|
|
return json_decode($this->getRawInput(), true) ?? [];
|
|
}
|
|
}
|