fragen


HTTP Anfrage

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:

Die Methode

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

Ruft die Anforderungsmethode ab

Die Methode gibt die Anforderungs-HTTP-Aktion zurück. Sie können auch die Methode

verwenden, um zu überprüfen, ob die HTTP-Aktion mit einem bestimmten Gast übereinstimmt: method

$method = $request->method();if ($request->isMethod('post')) { 
   //
}
isMethod

PSR-7-Anfrage

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
Middleware. Diese Middlewares werden in der Stapelliste der Klasse
platziert. Sie kürzen automatisch alle Eingabezeichenfolgenfelder in der Anfrage und konvertieren leere Zeichenfolgenfelder in

. 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). ConvertEmptyStringsToNullAppHttpKernelnull

AppHttpKernel$middleware

Eingabe abrufen

Alle Eingabedaten abrufen
Ja Verwenden

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 abrufen

Wenn 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} Die

-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

Bestimmen Sie, ob der Eingabewert vorhanden ist

-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');

Cookies

Von Anfrage erhalten Cookies

Alle 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ängt

kö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

Hochgeladene Dateien speichern

Um hochgeladene Dateien zu speichern, konfigurieren Sie zunächst das Dateisystem. Sie können die

-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');

{tip} Wenn Sie AWS Elastic Load Balancing verwenden, sollte Ihr $header-Wert < 🎜 sein >. Weitere Informationen zu den Konstanten, die mit dem Attribut Request::HEADER_X_FORWARDED_AWS_ELB verwendet werden können, finden Sie in der Symfony-Dokumentation zum Vertrauen in Proxys $headers

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

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
LearnKu.com.