Antwort
- Antwort erstellen
- Antwort Objekt
- Antwortheader hinzufügen
- Cache Control Middleware
- Cookies zur Antwort hinzufügen
- Cookies & Verschlüsselung
- Umleitung
- Antwort anzeigen
- JSON Antwort
HTTP-Antwort
Antwort erstellen
Zeichenfolge & Array
Alle Routen und Controller geben nach der Verarbeitung der Geschäftslogik eine Antwort zurück, die an den Browser des Benutzers gesendet wird. Die grundlegendste Antwort erfolgt über das Routing oder die Steuerung ein einfacher String, den das Framework automatisch in eine vollständige HTTP-Antwort umwandelt:
Route::get('/', function () { return 'Hello World'; });
Zusätzlich zur Rückgabe von Strings von Routen oder 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]; });
{tip} Wussten Sie, dass Sie Eloquent-Sammlungen auch von Routen oder Controllern zurückgeben können? Sie werden auch automatisch in JSON-Antworten umgewandelt.
Antwortobjekt
Normalerweise geben wir nicht einfach nur Strings und Arrays von Routing-Aktionen zurück, in den meisten Fällen eine vollständige
IlluminateHttpResponse
Instanz oder Sicht.Gibt eine vollständige
Response
-Instanz zurück, mit der Sie den HTTP-Statuscode und die Antwortheaderinformationen der Antwort anpassen können.Response
-Instanzen erben von der KlasseSymfonyComponentHttpFoundationResponse
, die verschiedene Konstruktoren für HTTP bereitstellt Antwortmethoden:Route::get('home', function () { return response('Hello World', 200) ->header('Content-Type', 'text/plain'); });
Antwortheader hinzufügen
Die meisten Antwortmethoden können in einer Kette aufgerufen werden Der Prozess der Erstellung von Antwortinstanzen ist lesbarer. Sie können beispielsweise die Methode
header
verwenden, um der Antwort eine Reihe von Headern hinzuzufügen, bevor sie an den Benutzer zurückgegeben wird:return response($content) ->header('Content-Type', $type) ->header('X-Header-One', 'Header Value') ->header('X-Header-Two', 'Header Value');
Alternativ können Sie die Methode
withHeaders
verwenden, um ein Array von anzugeben Header, 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 verfügt über eine integrierte
cache.headers
Middleware, mit der schnellCache-Control
Header-Informationen für Routinggruppen festgelegt werden können. Wennetag
im Direktivensatz deklariert ist, setzt Laravel die ETag-ID automatisch auf den MD5-Hash des Antwortinhalts:Route::middleware('cache.headers:public;max_age=2628000;etag')->group(function() { Route::get('privacy', function () { // ... }); Route::get('terms', function () { // ... }); });
Cookies zur Antwort hinzufügen
Sie können
cookie
für die Antwort verwenden Die Methode fügt der Antwort problemlos Cookies hinzu. Sie können beispielsweise die Methodecookie
verwenden, um ein Cookie zu generieren und es einfach wie folgt an die Antwort anzuhängen: Die Methodereturn response($content) ->header('Content-Type', $type) ->cookie('name', 'value', $minutes);
cookie
akzeptiert auch einige weniger häufig verwendete Parameter. Im Allgemeinen haben diese Parameter denselben Zweck und dieselbe Bedeutung wie die Parameter der nativen PHP-Setcookie-Methode:->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
Alternativ können Sie die
Cookie
Fassaden-„Warteschlange“Cookie
verwenden, um sie an die ausgehende Anwendung anzuhängen Antwort. Diequeue
-Methode akzeptiert eineCookie
-Instanz oder die Parameter, die zum Erstellen einerCookie
-Instanz erforderlich sind. 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 & Verschlüsselung
Von Standardmäßig sind alle von Laravel generierten Cookies verschlüsselt und signiert und können daher vom Client nicht geändert oder gelesen werden. Wenn Sie möchten, dass einige von der Anwendung generierte Cookies nicht verschlüsselt werden, können Sie das
app/Http/Middleware
-Attribut derAppHttpMiddlewareEncryptCookies
-Middleware im$except
-Verzeichnis verwenden:/** * 不需要被加密的cookies名称 * * @var array */ protected $except = [ 'cookie_name', ];
Redirect
Redirect-Antwort ist Eine Instanz der
IlluminateHttpRedirectResponse
-Klasse und enthält die Header-Informationen, die zum Umleiten des Benutzers zu einer anderen URL erforderlich sind. Laravel bietet mehrere Methoden zum Generieren vonRedirectResponse
-Instanzen. Am einfachsten ist es, die globale Hilfsfunktionredirect
zu verwenden:Route::get('dashboard', function () { return redirect('home/dashboard'); });
Manchmal möchten Sie den Benutzer möglicherweise an eine frühere Stelle umleiten, beispielsweise wenn das übermittelte Formular ungültig ist. Dazu können Sie dann die globale Hilfsfunktion
back
verwenden. Da diese Funktion die Sitzungssteuerung nutzt, stellen Sie sicher, dass die Route, die die Funktionback
aufruft, die Middleware-Gruppeweb
oder die gesamte Sitzungs-Middleware verwendet:Route::post('user/profile', function () { //验证请求 return back()->withInput(); });
Zu benannter Route umleiten
Wenn die Hilfsfunktion
redirect
ohne Parameter aufgerufen wird, wird eineIlluminateRoutingRedirector
-Instanz zurückgegeben. Mit dieser Instanz können Sie jede Methode aufRedirector
aufrufen. Um beispielsweiseRedirectResponse
für eine benannte Route zu generieren, können Sie die Methoderoute
verwenden:return redirect()->route('login');
Wenn die Route Parameter enthält, können Sie diese als zweiten Parameter an
route
übergeben Methode:// 对于具有以下 URI 的路由: profile/{id} return redirect()->route('profile', ['id' => 1]);
Von Eloquent Modellpopulationsparameter
Wenn Sie zu einer Route umleiten, die den Parameter „ID“ aus einem Eloquent-Modell ausfüllt, können Sie einfach das Modell selbst übergeben. Die ID wird automatisch extrahiert:
//对于具有以下 URI 的路由: profile/{id} return redirect()->route('profile', [$user]);
Wenn Sie den Standardparameternamen in diesem Routing-Parameter anpassen möchten, müssen Sie die
getRouteKey
-Methode auf der Modellinstanz überschreiben:/** * 获取模型的路由键 * * @return mixed */ public function getRouteKey(){ return $this->slug; }
Zum Controller springen Aktion
kann auch einen Sprung zur Controller-Aktion erzeugen. Übergeben Sie dazu einfach die Controller- und Aktionsnamen an die Methode
action
. Denken Sie daran, dass Sie nicht den vollständigen Namensraum des Controllers übergeben müssen, Laravel'sRouteServiceProvider
setzt ihn automatisch auf den Namensraum des Basis-Controllers:return redirect()->action('HomeController@index');
Wenn die Controller-Route Parameter erfordert, können Sie diese übergeben als
action
Der zweite Parameter der Methode:return redirect()->action( 'UserController@profile', ['id' => 1] );
Zu externem Domänennamen springen
Manchmal müssen Sie zu Domäne springen außerhalb der Anwendung. Dies wird durch den Aufruf der
away
-Methode erreicht, die eineRedirectResponse
-Instanz ohne zusätzliche URL-Codierung und Gültigkeitsprüfsummenprüfung erstellt:return redirect()->away('https://www.google.com');
Mit Transfersitzung Es kommt sehr häufig vor, dass Wertsprünge
zu einer neuen URL springen und gleichzeitig Daten an die Sitzung senden. Dies erfolgt in der Regel nach erfolgreicher Ausführung einer Aktion und dem Senden einer Nachricht an die Sitzung. Der Einfachheit halber können Sie eine
RedirectResponse
-Instanz erstellen und Daten in einem verketteten Methodenaufruf an die Sitzung übertragen:Route::post('user/profile', function () { // Update the user's profile... return redirect('dashboard')->with('status', 'Profile updated!'); });
Nachdem der Benutzer springt, können Sie die übertragenen Daten in der Sitzung anzeigen. Verwenden Sie beispielsweise die Blade-Syntax:
@if (session('status')) <div class="alert alert-success"> {{ session('status') }} </div> @endif
Andere Antworttypen
response
Zur Generierung können Helfer verwendet werden andere Typen Antwortbeispiel. Wenn derresponse
-Helfer mit Argumenten aufgerufen wird, wird eine Implementierung desIlluminateContractsRoutingResponseFactory
-Vertrags zurückgegeben. Dieser Vertrag bietet mehrere Methoden zum Generieren von Antworten:Antwort anzeigen
Wenn Sie die Ansicht als Antwortinhalt zurückgeben und den Antwortstatus und die Header-Informationen steuern müssen, müssen Sie die
view
-Methode aufrufen:return response() ->view('hello', $data, 200) ->header('Content-Type', $type);
Wenn ja Sie müssen keine benutzerdefinierten übergeben. Für HTTP-Statuscodes und benutzerdefinierte Header-Informationen können Sie auch die globale Hilfsfunktion
view
verwenden.JSON-Antwort
json
setzt die Header-InformationenContent-Type
automatisch aufapplication/json
, während PHPs verwendet werden Die Funktionjson_encode
konvertiert das angegebene Array in JSON :return response()->json([ 'name' => 'Abigail', 'state' => 'CA' ]);
Wenn Sie eine JSONP-Antwort erstellen möchten, können Sie diese in Verbindung mit der
withCallback
-Methodejson
verwenden Methode: Die Methodereturn response() ->json(['name' => 'Abigail', 'state' => 'CA']) ->withCallback($request->input('callback'));
Datei-Download
download
kann verwendet werden, um eine Datei zu generieren, die den Benutzer dazu zwingt Browser, um die Antwort auf die angegebene Pfaddatei herunterzuladen.download
Der Name der Methodendatei wird als zweiter Parameter verwendet, der als Dateiname der vom Benutzer heruntergeladenen Datei verwendet wird. Schließlich können Sie als dritten Parameter ein Array von HTTP-Headern übergeben:return response()->download($pathToFile); return response()->download($pathToFile, $name, $headers); return response()->download($pathToFile)->deleteFileAfterSend();
{note} Die zum Verwalten von Dateidownloads verwendete Symfony HttpFoundation erfordert, dass die heruntergeladene Datei einen ASCII-Dateinamen hat.
Streaming-Download
Manchmal möchten Sie möglicherweise die Zeichenfolgenantwort eines bestimmten Vorgangs in eine Download-Antwort konvertieren, ohne sie auf die Festplatte zu schreiben. Sie können zu diesem Zeitpunkt die Methode
streamDownload
verwenden. Diese Methode akzeptiert einen Rückruf, einen Dateinamen und ein optionales Array von Headern als Parameter:return response()->streamDownload(function () { echo GitHub::api('repo') ->contents() ->readme('laravel', 'laravel')['contents']; }, 'laravel-readme.md');
File Response
file
Mit dieser Methode wird eine Datei wie ein Bild oder PDF direkt im Browser des Benutzers angezeigt, anstatt sie herunterzuladen. Diese Methode akzeptiert den Dateipfad als ersten Parameter und das Header-Informationsarray als zweiten Parameter:return response()->file($pathToFile); return response()->file($pathToFile, $headers);
Response Macro
Wenn Sie eine benutzerdefinierte Antwort definieren möchten, die in mehreren Routen und Controllern wiederverwendet werden kann, können Sie die
Response
-Fassade verwendenmacro
Methode. Schreiben Sie beispielsweise den folgenden Code in die Methodeboot
eines Dienstanbieters: Die Methode<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Response; class ResponseMacroServiceProvider extends ServiceProvider{ /** * 注册应用程序的响应宏 * * @return void */ public function boot() { Response::macro('caps', function ($value) { return Response::make(strtoupper($value)); }); } }
macro
akzeptiert einen Namen als ersten Parameter und eine Abschlussfunktion als zweiten Parameter. Der Abschluss des Antwortmakros wird ausgeführt, wenn der Makroname in derResponseFactory
Implementierungsklasse oder Hilfsfunktionresponse
aufgerufen wird:return response()->caps('foo');
Dieser Artikel wurde zuerst auf LearnKu.com<🎜 veröffentlicht > Website.
- String & Array