Projects [SHOW]
06. Http Responses
Creating Responses
Strings & Arrays
Alle Routen und Controller sollten eine Antwort zurückgeben, die an den Browser des Benutzers gesendet wird. Laravel bietet mehrere verschiedene Möglichkeiten, Antworten (Responses) zurückzugeben. Die grundlegendste Antwort ist die Rückgabe einer Zeichenkette von einer Route oder einem Controller. Das Framework konvertiert die Zeichenkette automatisch in eine vollständige HTTP-Antwort:
Route::get('/', function () {
return 'Hello World';
});
Zusätzlich zur Rückgabe von Zeichenketten aus Ihren Routen und Controllern können Sie auch Arrays zurückgeben. Das Framework konvertiert das Array automatisch in eine JSON-Antwort:
Route::get('/', function () {
return [1, 2, 3];
});
Response Objects
Normalerweise werden Sie nicht nur einfache Zeichenketten oder Arrays aus Ihren Routenaktionen zurückgeben. Stattdessen werden Sie die vollständigen Illuminate\Http\Response Instanzen oder Views zurückgeben.
Die Rückgabe einer vollständigen Response-Instanz ermöglicht es Ihnen, den HTTP-Statuscode und die Header der Antwort anzupassen. Eine Response-Instanz erbt von der Klasse Symfony\Component\HttpFoundation\Response, die eine Vielzahl von Methoden zum Erstellen von HTTP-Antworten bietet:
Route::get('home', function () {
return response('Hello World', 200)
->header('Content-Type', 'text/plain');
});
Attaching Headers To Responses
Beachten Sie, dass die meisten Antwortmethoden kaskadierbar sind, was den flüssigen Aufbau von Response-Instanzen ermöglicht. Beispielsweise können Sie mit der Header-Methode eine Reihe von Headern zur Antwort hinzufügen, bevor Sie sie an den Benutzer zurücksenden:
return response($content)
->header('Content-Type', $type)
->header('X-Header-One', 'Header Value')
->header('X-Header-One', 'Header Value');
Oder Sie können die withHeaders-Methode verwenden, um ein Array von Headern anzugeben, die der Antwort hinzugefügt werden sollen:
return response($content)
->withHeaders([
'Content-Type' => $type,
'X-Header-One' => 'Header Value',
'X-Header-Two' => 'Header Value',
]);
Cache Control Middleware
Laravel enthält eine cache.headers-Middleware, mit der Sie den Cache-Control-Header für eine Gruppe von Routen schnell einstellen können. Wenn in der Liste der Direktiven etag angegeben ist, wird automatisch ein MD5-Hash des Antwortinhalts als ETag-Kennung gesetzt:
Route::middleware('cache.headers:public;max_age=2628000;etag')->group(function() {
Route::get('privacy', function () {
// ...
});
Route::get('terms', function () {
// ...
});
});
Attaching Cookies To Responses
Die Cookie-Methode für Antwortinstanzen ermöglicht es Ihnen, auf einfache Weise Cookies an die Antwort anzuhängen. Beispielsweise können Sie mit der Cookie-Methode ein Cookie erzeugen und es wie gewohnt fließend an die Antwortinstanz anhängen:
return response($content)
->header('Content-Type', $type)
->cookie('name', 'value', $minutes);
Die Cookie-Methode akzeptiert auch ein paar weitere Argumente, die weniger häufig verwendet werden. Im Allgemeinen haben diese Argumente den gleichen Zweck und die gleiche Bedeutung wie die Argumente, die der nativen setcookie-Methode von PHP gegeben würden:
->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
Alternativ können Sie die Cookie-Facade verwenden, um Cookies in die Queue zu stellen, um sie an die ausgehende Antwort Ihrer Anwendung anzuhängen. Die queue-Methode akzeptiert eine Cookie-Instanz oder die Argumente, die zum Erstellen einer Cookie-Instanz benötigt werden. Diese Cookies werden an die ausgehende Antwort angehängt, bevor sie an den Browser gesendet werden:
Cookie::queue(Cookie::make('name', 'value', $minutes));
Cookie::queue('name', 'value', $minutes);
Cookies & Encryption
Standardmäßig sind alle von Laravel erzeugten Cookies verschlüsselt und signiert, so dass sie vom Client nicht geändert oder gelesen werden können. Wenn Sie die Verschlüsselung für eine Teilmenge von Cookies, die von Ihrer Anwendung erzeugt werden, deaktivieren möchten, können Sie die Eigenschaft $except der Middleware App\Http\Middleware\EncryptCookies verwenden, die sich im Verzeichnis app/Http/Middleware befindet:
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
'cookie_name',
];