4.8 KiB
Http-Response
Die Response-Klassen dienen dazu eine gültige Response zu erstellen und an den Client zu senden.
Für die unterschiedliche Response-Arten gibt es mehrere Klassen um die Anwendung zu erleichtern:
Response
– Universelle KlasseFileResponse
– Zum Senden von DateienJsonResponse
– Zum Senden von JSON-Inhalten (z.B. für AJAX-Requests)RedirectResponse
– Zum Umleiten des Clients auf eine andere URL
Response Klasse
Die Klasse Response
wird für alle Response-Arten benutzt, für die keine spezielle Klasse existiert.
Beispiel
use Xentral\Components\Http\Response;
$response = new Response('This is my response body.');
$response->setContentType('text/html', 'utf-8');
$response->addHeader('Cache-Control', 'no-cache');
$response->send();
Überblick
- Response erstellen
- Eigene Header anfügen oder überschreiben
- Response-Body setzen
- Response an Client senden
Response erstellen
use Xentral\Components\Http\Response;
$response = new Response(
'This is my response Content.',
Response::HTTP_CREATED, //alle HTTP status Codes sind als Konstante verfügbar
['Cache-Control' => ['no-cache']],
'1.0',
'Created'
);
Erzeugt folgende Response:
HTTP/1.0 201 Created
Cache-Control: no-cache
Content-Type: text/html; charset=utf-8
Content-Length: 28
This is my response Content.
Header hinzufügen/ändern
addHeader
Mit addHeader('Header-Name', 'Value')
wird ein neuer Header bzw.
ein weiterer Wert zu einem bestehenden Header hinzugefügt.
Hinweis: Bei einigen Headern wie z.B. Content-Type
, Content-Length
, Content-Disposition
und Date
kann nur
ein Wert zugewiesen werden. Bei der Übergabe von mehreren Werten wird ein InvalidArgumentException
geworfen.
setHeader
Mit setHeader('Header-Name', ['Value1', 'value2])
wird ein neuer Header gesetzt und dabei ein
bestehender Header überschrieben. Hier können mehrere Werte in einem array
übergeben werden.
Response-Body setzen
Mit setContent('Mein Inhalt als String')
wird der Response-Body gesetzt.
Hinweis: setContent
berechnet und setzt zusätzlich den Content-Length
Header. Wird null
als Parameter
übergeben, so wird der Content-Length
Header entfernt.
Response an Client senden
Mit send()
wird die Response abgeschickt. Vor dem Senden wird die Response noch modifiziert:
- Falls noch nicht vorhanden wird der
Date
Header gesetzt. - Falls der Response-Body
null
ist, werden derContent-Type
- undContent-Length
Header entfernt.
RedirectResponse Klasse
Die RedirectResponse-Klasse vereinfacht das Umleiten auf andere Seiten.
Beispiel
use Xentral\Components\Http\Response;
use Xentral\Components\Http\RedirectResponse;
$redirect = RedirectResponse::createFromUrl('index.php?module=auftrag&action=list');
$redirect->setStatusCode(Response::HTTP_MOVED_PERMANENTLY);
$redirect->send();
Im Beispiel wird der Statuscode geändert. Per default ist 302 Found
als HTTP Status gesetzt.
JsonResponse Klasse
Die JsonResponse Klasse vereinfacht das Erstellen von JSON-formatierten Antworten.
Beispiel
use Xentral\Components\Http\JsonResponse;
$data = [
'data' => [
'id' => '1234',
'typ' => 'herr',
'name' => 'Max Mustermann',
]
];
$response = new JsonResponse($data);
Erzeugt folgende Response:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 59
{"data":{"id":"1234","typ":"herr","name":"Max Mustermann"}}
Als FileResponse kann ein array
oder ein JsonSerializable
-Objekt übergeben werden.
FileResponse Klasse
Die FileResponse Klasse vereinfacht das Erstellen von Datei-Downloads.
FileResponse::createFromFile()
Im folgenden Beispiel enthält /tmp/file.txt
den Text Hallo Welt
.
use Xentral\Components\Http\FileResponse;
$fileResponse = FileResponse::createFromFile('/tmp/file.txt', 'download.txt');
Erzeugt folgende Response:
HTTP/1.1 200 OK
Content-Disposition: attachment; filename*="download.txt"; filename="download.txt"
Content-Type: text/plain; charset=utf-8
Content-Length: 20
Hallo Welt
Es wird versucht den Content-Type anhand des Mimetyps der Datei zu ermitteln. Falls die Erkennung fehlschlägt wird
der Content-Type auf application/octet-stream
gesetzt. Der Content-Type kann mit $response->setContentType()
überschrieben werden.
FileResponse::createForcedDownload()
Erzwingt den Download des Response-Contents. Das ist bei PDF's und Bildern besonders nützlich. Diese werden im Browser oft im Viewer geöffnet anstatt heruntergeladen zu werden.
createForcedDownload
setzt den Content-Type application/force-download
, dadurch erhält der User
den "Speichern unter"-Dialog.