fragen
HTTP Anfrage
- Anfrage empfangen
- Eingabevorverarbeitung & Normalisieren
- Daten empfangen
- Datei
- Vertrauens-Proxy konfigurieren
Anfrage annehmen
Um den aktuellen Wert durch Abhängigkeitsinjektion zu erhalten Für HTTP-Anforderungsinstanzen sollten Sie die Klasse IlluminateHttpRequest
auf dem Controller einführen. Die eingehenden Anforderungsinstanzen werden automatisch vom Dienstcontainer eingefügt:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller{ /** * 存储一个新用户。 * * @param Request $request * @return Response */ public function store(Request $request) { $name = $request->input('name'); // } }
Dependency Injection & Routing Parameters
Wenn Ihr Controller Daten aus Routenparametern abrufen muss, sollten Sie die Parameter nach anderen Abhängigkeiten einschließen. Ihre Route ist beispielsweise wie folgt definiert:
Route::put('user/{id}', 'UserController@update');
Sie können den Controller mit der folgenden Methode definieren und die Klasse IlluminateHttpRequest
verwenden, um Ihre Routenparameter id
abzurufen:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller{ /** * 更新指定用户 * * @param Request $request * @param string $id * @return Response */ public function update(Request $request, $id) { // } }
Parameter durch Abschluss-Routing abrufen
Sie können es auch beim Routing von Abschlüssen verwenden IlluminateHttpRequest
-Klasse fügt der Service-Container automatisch die Anforderungsparameter in den Routing-Abschluss ein:
use Illuminate\Http\Request; Route::get('/', function (Request $request) { // });
Anforderungspfad und -methode
IlluminateHttpRequest
Instanzen bieten eine Reihe von Methoden zur Überprüfung und Vererbung von HTTP-Anforderungsparametern SymfonyComponentHttpFoundationRequest
Klasse . Hier sind einige wichtige Methoden dieser Klasse:
Get request path
path
gibt die angeforderten Pfadinformationen zurück. Wenn der angeforderte Pfad also http://domain.com/foo/bar
ist, gibt die Methode path
foo/bar
:
$uri = $request->path();
is
zurück, um zu überprüfen, ob der Pfad der eingehenden Anforderung mit dem angegebenen Muster übereinstimmt. Bei dieser Methode können Sie auch das Zeichen *
als Platzhalter verwenden:
if ($request->is('admin/*')) { // }
Anfrage-URL abrufen
Sie können das Zeichen url
oder <🎜 verwenden > Methode, um die vollständige Anforderungs-URL zu erhalten. fullUrl
Die Methode gibt die URL zurück, die die Abfragezeichenfolge nicht enthält: url
// 不附带查询串... $url = $request->url(); // 附带查询串... $url = $request->fullUrl();
fullUrl
verwenden, um zu überprüfen, ob die HTTP-Aktion mit einem bestimmten Gast übereinstimmt: method
$method = $request->method();if ($request->isMethod('post')) { // }
isMethod
Der PSR-7-Standard definiert die HTTP-Nachrichtenschnittstelle, einschließlich Anfragen und Antworten. Wenn Sie PSR-7-Anfragen anstelle von Laravel-Anfragen verwenden möchten, müssen Sie zunächst einige Bibliotheken installieren. Laravel verwendet die Symfony HTTP Message Bridge-Komponente, um typische Laravel-Anfragen und -Antworten in eine PSR-7-kompatible Implementierung umzuwandeln: Fordern Sie einen Hinweis auf den Schnittstellentyp in der Servermethode an, um PSR-7 zu erhalten Anfrage:
composer require symfony/psr-http-message-bridge composer require zendframework/zend-diactoros
{tip} Wenn eine PSR-7-Antwortinstanz von einer Route oder einem Controller zurückgegeben wird, konvertiert das Framework sie automatisch zurück in eine Laravel-Antwortinstanz und zeigt sie an.
Eingabebeschneidung und Normalisierung Standardmäßig wird Laravel im globalen Middleware-Stack der Anwendung ausgeführt. Enthält
und. So müssen Sie sich keine Gedanken über standardisierte Konventionen bei Routing und Controllern machen.
Wenn Sie dieses Verhalten deaktivieren möchten, entfernen Sie es einfach aus dem TrimStrings
-Attribut der Klasse (entspricht dem Entfernen aus dem Middleware-Stack der Anwendung). ConvertEmptyStringsToNull
AppHttpKernel
null
AppHttpKernel
$middleware
Methode zum Abrufen des gesamten Eingabedaten-Arrays:
use Psr\Http\Message\ServerRequestInterface; Route::get('/', function (ServerRequestInterface $request) { // });
Einen einzelnen Eingabewert abrufen
Mit einigen einfachen Methoden können Sie alle Benutzereingaben über die IlluminateHttpRequest
-Instanz abrufen, ohne sich Gedanken darüber machen zu müssen, welche HTTP-Aktion der Benutzer angefordert hat. Unabhängig von der HTTP-Aktion kann die Anforderung des Benutzers mit der Methode input
abgerufen werden:
$input = $request->all();
kann den Standardwert als zweiten Parameter an die Methode input
übergeben. Dieser Wert wird zurückgegeben, wenn die Anfrage diesen Parameter nicht enthält:
$name = $request->input('name');
Wenn Sie mit einem Formular arbeiten, das eine Array-Eingabe enthält, verwenden Sie den „Punkt“-Operator, um auf Array-Elemente zuzugreifen:
$name = $request->input('name', 'Sally');
Ohne Parameter Rufen Sie input
auf Methode, die alle Eingabewerte abrufen kann (in assoziativer Array-Form):
$name = $request->input('products.0.name'); $names = $request->input('products.*.name');
Eingabe aus der Abfragezeichenfolge abrufen
input
Methode ruft den Wert aus dem ab gesamter Anfrageträger (einschließlich Abfragezeichenfolge), query
Die Methode erhält den Wert nur aus der Abfragezeichenfolge:
$input = $request->input();
Wenn der Abfragezeichenfolgenwert nicht vorhanden ist, wird der zweite Parameter der query
-Methode als Standardwert des Parameters zurückgegeben:
$name = $request->query('name');
Aufruf ohne Parameterquery
Methode, die alle Werte der Abfragezeichenfolge abrufen kann (in Form eines assoziativen Arrays):
$name = $request->query('name', 'Helen');
Eingabe über dynamische Attribute erhalten
Sie Der Benutzer kann über die dynamischen Attribute der IlluminateHttpRequest
-Instanz eingeben. Wenn Ihr Bewerbungsformular beispielsweise ein name
-Feld enthält, können Sie wie folgt auf den Feldwert zugreifen:
$query = $request->query();
Bei der Verwendung dynamischer Eigenschaften sucht Laravel zunächst im Anfragetext nach dem Wert des Parameters. Wenn der Wert nicht vorhanden ist, sucht Lavarel in den Routenparametern.
JSON-Eingabe abrufen
Wenn Sie eine JSON-Anfrage an die Anwendung übergeben, können Sie über die Methode input
auf die JSON-Daten zugreifen, sofern die Anforderung <🎜 ist > Header ist auf Content-Type
gesetzt. Sie können auch die „Punkt“-Syntax verwenden, um auf JSON-Arrays zuzugreifen: application/json
$name = $request->name;Teil der Eingabedaten abrufenWenn Sie eine Teilmenge der Eingabedaten benötigen, Sie können die Methode
oder only
verwenden. Sie akzeptieren ein einzelnes except
oder eine dynamische Parameterliste: array
$name = $request->input('user.name');
{tip} DieBestimmen Sie, ob der Eingabewert vorhanden ist-Methode gibt alle Schlüssel-Wert-Paare in der Anfrage zurück, jedoch keinen Schlüssel-Wert Paare, die in der Anfrage nicht vorhanden sind.
only
-Methode wird verwendet, um zu bestimmen, ob der angegebene Wert in der Anfrage vorhanden ist. Wenn der Wert in der Anfrage vorhanden ist, gibt die Methode has
has
zurück: true
$input = $request->only(['username', 'password']); $input = $request->only('username', 'password'); $input = $request->except(['credit_card']); $input = $request->except('credit_card');Wenn ein Array angegeben ist, ermittelt die Methode
, ob alle angegebenen Werte in der Anfrage vorhanden sind: has
if ($request->has('name')) { // }Wenn Sie feststellen möchten, ob ein Wert in der Anfrage vorhanden und nicht leer ist, müssen Sie
verwenden Methode: filled
if ($request->has(['name', 'email'])) { // }
Alte Daten
Laravel ermöglicht es Ihnen, Daten zwischen Anfragen beizubehalten. Diese Funktion ist nützlich, wenn ein Formular nach einem Validierungsfehler erneut ausgefüllt wird. Wenn Sie jedoch die integrierten Validierungsfunktionen von Lavarel verwenden, müssen Sie diese Methoden nicht manuell aufrufen, da einige der integrierten Validierungsfunktionen von Laravel sie automatisch aufrufen.
Eingabedaten an Sitzung übertragen
IlluminateHttpRequest
Die Methode flash
der Klasse überträgt die aktuelle Eingabe an die Sitzung, wenn der Benutzer diese Anfrage an die Anwendung stellt Sie sind noch verfügbar:
if ($request->filled('name')) { // }
kann mit flashOnly
oder flashExcept
verwendet werden Die Methode übergibt eine Teilmenge der angeforderten Daten an die Sitzung. Diese Methoden werden häufig verwendet, um sensible Daten wie Passwörter von der Sitzungspersistenz auszuschließen:
$request->flash();
Daten übertragen und springen
Wenn Sie häufig Eingaben an die Sitzung senden müssen und dann Springe zur vorherigen Seite, die durch Verlinkung nach der Sprungfunktion withInput
aufgerufen werden kann Die Methode ist einfach zu implementieren:
$request->flashOnly(['username', 'email']);$request->flashExcept('password');
Alte Daten abrufen
Um die von der vorherigen Anfrage gesendeten Daten abzurufen, können Sie die Request
-Methode von <🎜 verwenden > Instanz. Die old
-Methode ruft den zuvor übertragenen Wert aus der Sitzung ab: old
return redirect('form')->withInput(); return redirect('form')->withInput( $request->except('password') );Laravel bietet auch einen globalen
-Helfer. Wenn Sie alte Daten in einer Blade-Vorlage anzeigen möchten, ist der old
-Helfer einfacher zu verwenden. Wenn der alte Wert für die angegebene Domain nicht existiert, wird old
zurückgegeben: null
$username = $request->old('username');CookiesVon Anfrage erhalten CookiesAlle vom Lavarel-Framework generierten Cookies sind verschlüsselt und mit einem Autorisierungscode signiert, was bedeutet, dass sie ungültig werden, wenn sie vom Kunden geändert werden. Der Cookie-Wert kann aus der Anfrage mithilfe der
-Methode der IlluminateHttpRequest
-Instanz abgerufen werden: cookie
<input type="text" name="username" value="{{ old('username') }}">Sie können auch die
-Fassade verwenden, um auf den Cookie-Wert zuzugreifen: Cookie
$value = $request->cookie('name');werden Cookies an die Antwort angehängtkönnen verwendet werden
Die Methode hängt ein Cookie an die Ausgabeinstanz cookie
an. Sie müssen den Namen, den Wert und die Cookie-Ablaufzeit (in Minuten) an diese Methode übergeben: IlluminateHttpResponse
$value = Cookie::get('name');
Sie können auch mehrere andere, weniger häufig verwendete Parameter akzeptieren. Normalerweise haben diese Parameter dieselbe Rolle und Bedeutung wie die Parameter der in PHP integrierten setcookie-Methode: cookie
return response('Hello World')->cookie( 'name','value',$minutes );Ebenso können Sie die
-Fassade verwenden, um Cookies zum Anhängen an die Ausgabeantwort von zu „anordnen“. Anwendung. Die Cookie
-Methode akzeptiert eine queue
-Instanz oder eine Liste von Argumenten, die zum Erstellen des Cookie
erforderlich sind. Diese Cookies werden an die Ausgabeantwort angehängt, bevor sie an den Browser gesendet werden: Cookie
return response('Hello World')->cookie( 'name', 'value', $minutes, $path, $domain, $secure, $httpOnly );
Cookie-Instanz generieren
Wenn Sie eine SymfonyComponentHttpFoundationCookie
-Instanz generieren möchten, die dann einer Antwortinstanz bereitgestellt werden kann, können Sie den globalen cookie
-Helper verwenden. dieses Plätzchen Wird nicht an den Client zurückgegeben, ohne an eine Antwortinstanz angehängt zu werden:
Cookie::queue(Cookie::make('name', 'value', $minutes)); Cookie::queue('name', 'value', $minutes);
Datei
Laden Sie die hochgeladene Datei herunter
kann verwendet werden Die IlluminateHttpRequest
-Methode oder das dynamische Attribut der file
-Instanz greift auf die hochgeladene Datei zu. Die Methode file
gibt eine Instanz der Klasse IlluminateHttpUploadedFile
zurück, die die Klasse SplFileInfo
von PHP erweitert und mehrere Methoden für die Dateiinteraktion bereitstellt:
$cookie = cookie('name', 'value', $minutes); return response('Hello World')->cookie($cookie);
kann mit hasFile
verwendet werden Methode, um festzustellen, ob die angegebene Datei in der Anfrage vorhanden ist:
$file = $request->file('photo'); $file = $request->photo;
Erfolgreichen Upload überprüfen
Zusätzlich zur Überprüfung, ob die Datei vorhanden ist, können Sie auch <🎜 verwenden > Methode zur Überprüfung, ob die hochgeladene Datei kein Problem aufweist: isValid
if ($request->hasFile('photo')) { // }Dateipfad & Die Extension
-Klasse enthält auch Methoden für den Zugriff auf den vollständigen Pfad und die Erweiterung einer Datei. UploadedFile
Die Methode errät die passende Dateierweiterung basierend auf dem Inhalt der Datei. Diese Erweiterung kann sich von der vom Client bereitgestellten Erweiterung unterscheiden: extension
if ($request->file('photo')->isValid()) { // }Andere Dateimethoden
Für die Instanz stehen mehrere andere Methoden zur Verfügung. Weitere Informationen zu diesen Methoden finden Sie in der API-Dokumentation für diese Klasse. UploadedFile
-Methode von UploadedFile
verwenden, um die hochgeladene Datei auf eine Ihrer Festplatten zu verschieben. Dies kann ein Speicherort in Ihrem lokalen Dateisystem oder sogar ein Cloud-Speicherort wie Amazon S3 sein. Die Methode store
akzeptiert einen Pfad relativ zum Stammverzeichnis der Dateisystemkonfiguration, in der die Datei gespeichert ist. Dieser Pfad darf keinen Dateinamen enthalten, da das System automatisch eine eindeutige ID als Dateinamen generiert. Die Methode store
akzeptiert auch einen optionalen zweiten Parameter, den Namen des Datenträgers, auf dem die Datei gespeichert ist. Diese Methode gibt den Dateipfad relativ zum Stammverzeichnis der Festplatte zurück: store
$path = $request->photo->path(); $extension = $request->photo->extension();Wenn Sie nicht möchten, dass der Dateiname automatisch generiert wird, können Sie die Methode
verwenden, die den Pfad akzeptiert. Dateiname und Festplattenname als Parameter: storeAs
$path = $request->photo->store('images'); $path = $request->photo->store('images', 's3');
Konfigurieren eines vertrauenswürdigen Proxys
Wenn Ihre Anwendung hinter einem Load Balancer mit einem abgelaufenen TLS/SSL-Zertifikat ausgeführt wird, stellen Sie möglicherweise fest, dass Ihre Anwendung manchmal keine HTTPS-Links generiert. Dies liegt in der Regel daran, dass Ihre Anwendung Datenverkehr vom Load Balancer an Port 80 weiterleitet, ohne zu wissen, ob eine sichere Verbindung generiert werden soll.
Um dieses Problem zu lösen, müssen Sie die AppHttpMiddlewareTrustProxies
Middleware in Ihre Laravel-Anwendung einbinden, mit der Sie den Load Balancer oder Proxy, dem Ihre Anwendung vertraut, schnell anpassen können. Ihre vertrauenswürdigen Proxys sollten als Array im $proxies
-Attribut dieser Middleware aufgeführt sein. Zusätzlich zur Konfiguration vertrauenswürdiger Proxys können Sie auch konfigurieren, welche Proxys vertrauenswürdig sein sollen $header
:
$path = $request->photo->storeAs('images', 'filename.jpg'); $path = $request->photo->storeAs('images', 'filename.jpg', 's3');
Allen Proxys vertrauen Wenn Sie Amazon AWS oder andere „Cloud“-Load-Balancer-Anbieter verwenden, kennen Sie möglicherweise nicht die tatsächliche IP-Adresse des Load-Balancers. In diesem Fall können Sie{tip} Wenn Sie AWS Elastic Load Balancing verwenden, sollte Ihr
$header
-Wert < 🎜 sein >. Weitere Informationen zu den Konstanten, die mit dem AttributRequest::HEADER_X_FORWARDED_AWS_ELB
verwendet werden können, finden Sie in der Symfony-Dokumentation zum Vertrauen in Proxys$headers
verwenden, um allen Proxys zu vertrauen: *
<?php namespace App\Http\Middleware; use Illuminate\Http\Request; use Fideloper\Proxy\TrustProxies as Middleware; class TrustProxies extends Middleware{ /** * 应用程序的可信代理列表 * * @var array */ protected $proxies = [ '192.168.1.1', '192.168.1.2', ]; /** * 应该用来检测代理的头信息 * * @var string */ protected $headers = Request::HEADER_X_FORWARDED_ALL;}Dieser Artikel erschien zuerst auf der Website