Responses
Die abstrakte Klasse RHRZ\Framework\Response
verkörpert eine HTTP-Response, die als Antwort auf einen Request an den Client gesendet wird. Im Framework sind folgende polymorphe Klassen enthalten, die von dieser Klasse erben.
- Eine
RawResponse
gibt rohen Text oder HTML aus. - Eine
ViewResponse
erzeugt HTML durch das Rendern einer Twig-Datei. - Eine
JsonResponse
gibt Daten als JSON kodiert aus. - Eine
FileResponse
sendet eine Datei an den Client. - Eine
RedirectResponse
leitet auf eine andere Seite weiter.
Nutzung
Die Klasse RHRZ\Framework\Response
besitzt diverse statische Methoden zum Erstellen konkreter Response-Instanzen.
RawResponse
Response::raw($data = null)
erstellt eine RawResponse
. Die übergebenen Daten werden ohne weitere Verarbeitung ausgegeben.
ViewResponse
Response::view(string $file, array $data = [])
erstellt eine ViewResponse
. Der Parameter $file
ist der Name der Twig-Datei, die gerendert werden soll, relativ zum Ordner views
.
JsonResponse
Insbesondere bei der Entwicklung einer API werden die Daten nicht als HTML, sondern als JSON zurückgegeben. Response::json($data = [])
erstellt eine JsonResponse
.
Um mit dem Framework entwickelte Schnittstellen zu vereinheitlichen, werden die Daten einer JsonResponse
in einem Wrapper gekapselt. Dieser enthält folgende Attribute.
error
enthält eine Fehlermeldung, falls eine Exception aufgetreten ist.data
enthält die eigentlichen Daten.custom
enthält zusätzliche Daten, die der Entwickler setzen kann.validation
enthält Validierungsfehler und die Formulardaten des vorherigen Requests.meta
enthält Meta-Informationen zu Request und Response. Weitere Informationen können vom Entwickler gesetzt werden.debug
enthält Informationen, die beim Debugging hilfreich sein können. Dieses Attribut ist nur bei aktiviertem Debug-Modus vorhanden.
Die Klasse JsonResponse
verfügt zusätzlich zur Elternklasse über folgende Methoden.
getMeta(string $key)
gibt die Metadaten zu einem bestimmten$key
zurück.setMeta(string $key, $val)
setzt die Metadaten zu einem bestimmten$key
und gibt die aktuelle Instanz zurück.getCustom(string $key)
gibt die zusätzlichen Daten zu einem bestimmten$key
zurück.setCustom(string $key, $val)
setzt die zusätzlichen Daten zu einem bestimmten$key
und gibt die aktuelle Instanz zurück.
FileResponse
Mit folgenden Methoden kann eine FileResponse
erstellt werden.
Response::file(string $path, string $name = null)
sendet eine Datei an den Client. Falls der Browser dies unterstützt, wird die Datei im Browser angezeigt, andernfalls als Download angeboten.Response::download(string $path, string $name = null)
forciert die Rückgabe als Download.
Der Parameter $path
ist der Pfad der zu sendenden Datei. Über den optionalen Parameter $name
kann der Datei ein anderer Name gegeben werden, falls sie zum Download angeboten wird.
RedirectResponse
Ein Redirect dient dazu, den Client auf eine andere URL weiterzuleiten. Mit folgenden Methoden kann eine RedirectResponse
erstellt werden.
Response::redirect(string $route, $data = [])
ist ein Alias fürredirectRoute
.Response::redirectRoute(string $route, $data = [])
leitet auf eine Route innerhalb der Anwendung weiter. Der Parameter$data
verhält sich wie bei der MethodeApp::route
(siehe Pfade generieren).Response::redirectPath(string $path)
leitet auf einen Pfad innerhalb der Anwendung weiter. Der Teil der URL bis zum Root-Verzeichnis wird automatisch ergänzt.Response::redirectUrl(string $url)
leitet auf eine URL weiter, bei der es sich auch um eine andere Domain handeln kann.Response::redirectSame()
leitet auf den Pfad des aktuellen Requests weiter.
Der Statuscode für Redirects ist standardmäßig 303
(See Other). Dieser Code wird üblicherweise nach einem erfolgreichen POST
-Request verwendet. Bei Inhalten, die dauerhaft unter einer anderen Adresse zu finden sind, sollte 301
(Moved Permanently) verwendet werden. Der Statuscode kann mit der Methode setStatus(int $code)
gesetzt werden.
Methoden
Die Klasse Response
und ihre Kindklassen verfügen über folgende Methoden.
getStatus(): int
liefert den Statuscode der HTTP Response zurück. Der Standardwert ist200
.setStatus(int $code)
setzt den Statuscode und gibt die aktuelle Instanz zurück.getData()
gibt die Daten der Response zurück.getClass()
gibt den Klassennamen der Response zurück.getHeaders()
gibt die Response-Header zurück, sieheheaders_list()
.setHeader(string $header, string $value, bool $replace = true)
setzt einen Response-Header mit der Funktionheader()
und gibt die aktuelle Instanz zurück.send()
trifft je nach Art der Response letzte Vorbereitungen und sendet das Ergebnis an den Client. Diese abstrakte Methode muss von den Kindklassen implementiert werden.