Erklärung
Zugriff auf das Request-Objekt
Webman injiziert automatisch das Request-Objekt in den ersten Parameter der Aktionsmethode, zum Beispiel
Beispiel
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
$default_name = 'webman';
// Abrufen des name-Parameters aus der GET-Anfrage. Falls der Name-Parameter nicht übergeben wird, wird der Standardname zurückgegeben
$name = $request->get('name', $default_name);
// Zurückgeben einer Zeichenfolge an den Browser
return response('Hallo ' . $name);
}
}
Mit dem $request
-Objekt können wir auf alle relevanten Anfrage-Daten zugreifen.
Manchmal möchten wir das $request
-Objekt in anderen Klassen abrufen. In diesem Fall verwenden wir einfach die Hilfsfunktion request()
;
Abrufen von GET-Parametern
Abrufen des gesamten GET-Arrays
$request->get();
Wenn die Anfrage keine GET-Parameter enthält, wird ein leeres Array zurückgegeben.
Abrufen eines Werts aus dem GET-Array
$request->get('name');
Wenn der Wert nicht im GET-Array enthalten ist, wird null
zurückgegeben.
Sie können auch einen Standardwert als zweiten Parameter an die get
-Methode übergeben. Wenn der Wert im GET-Array nicht gefunden wird, wird der Standardwert zurückgegeben. Zum Beispiel:
$request->get('name', 'tom');
Abrufen von POST-Parametern
Abrufen des gesamten POST-Arrays
$request->post();
Wenn die Anforderung keine POST-Parameter enthält, wird ein leeres Array zurückgegeben.
Abrufen eines Werts aus dem POST-Array
$request->post('name');
Wenn der Wert nicht im POST-Array enthalten ist, wird null
zurückgegeben.
Wie bei der get
-Methode können Sie auch der post
-Methode einen Standardwert als zweiten Parameter übergeben. Wenn der Wert im POST-Array nicht gefunden wird, wird der Standardwert zurückgegeben. Zum Beispiel:
$request->post('name', 'tom');
Abrufen des Original-POST-Körpers der Anfrage
$post = $request->rawBody();
Diese Funktion ähnelt der Verwendung von file_get_contents("php://input");
in php-fpm
und dient zum Abrufen des ursprünglichen HTTP-Anforderungskörpers. Dies ist besonders nützlich, um POST-Anfrage-Daten in einem Format abzurufen, das nicht application/x-www-form-urlencoded
entspricht.
Abrufen von Headern
Abrufen des gesamten Header-Arrays
$request->header();
Wenn die Anfrage keine Header-Parameter enthält, wird ein leeres Array zurückgegeben. Beachten Sie, dass alle Schlüssel klein geschrieben sind.
Abrufen eines Werts aus dem Header-Array
$request->header('host');
Wenn der Wert nicht im Header-Array enthalten ist, wird null
zurückgegeben. Beachten Sie, dass alle Schlüssel klein geschrieben sind.
Wie bei der get
-Methode können Sie auch der header
-Methode einen Standardwert als zweiten Parameter übergeben. Wenn der Wert im Header-Array nicht gefunden wird, wird der Standardwert zurückgegeben. Zum Beispiel:
$request->header('host', 'localhost');
Abrufen von Cookies
Abrufen des gesamten Cookie-Arrays
$request->cookie();
Wenn die Anfrage keine Cookie-Parameter enthält, wird ein leeres Array zurückgegeben.
Abrufen eines Werts aus dem Cookie-Array
$request->cookie('name');
Wenn der Wert nicht im Cookie-Array enthalten ist, wird null
zurückgegeben.
Wie bei der get
-Methode können Sie auch der cookie
-Methode einen Standardwert als zweiten Parameter übergeben. Wenn der Wert im Cookie-Array nicht gefunden wird, wird der Standardwert zurückgegeben. Zum Beispiel:
$request->cookie('name', 'tom');
Abrufen aller Eingaben
Beinhaltet die Sammlung von POST
und GET
.
$request->all();
Abrufen eines bestimmten Eingabewerts
Abrufen eines Werts aus der Sammlung von POST
und GET
mit einem Standardwert, falls erforderlich.
$request->input('name', $standardwert);
Abrufen von Teilen der Eingabedaten
Abrufen von Teilen der Daten aus der Sammlung von POST
und GET
.
// Abrufen eines Arrays, das aus Benutzername und Passwort besteht. Wenn der entsprechende Schlüssel nicht vorhanden ist, wird dieser ignoriert
$only = $request->only(['username', 'password']);
// Abrufen aller Eingaben außer Avatar und Alter
$except = $request->except(['avatar', 'age']);
Abrufen von hochgeladenen Dateien
Abrufen des gesamten hochgeladenen Datei-Arrays
$request->file();
Formular ähnlich:
<form method="post" action="http://127.0.0.1:8787/upload/files" enctype="multipart/form-data" />
<input name="file1" multiple="multiple" type="file">
<input name="file2" multiple="multiple" type="file">
<input type="submit">
</form>
Das von $request->file()
zurückgegebene Format ist ähnlich wie:
array (
'file1' => object(webman\Http\UploadFile),
'file2' => object(webman\Http\UploadFile)
)
Es handelt sich um ein Array von Instanzen der Klasse webman\Http\UploadFile
. Die Klasse webman\Http\UploadFile
erbt von der eingebauten PHP-Klasse SplFileInfo
und stellt einige nützliche Methoden bereit.
<?php
namespace app\controller;
use support\Request;
class UploadController
{
public function files(Request $request)
{
foreach ($request->file() as $key => $spl_file) {
var_export($spl_file->isValid()); // Gibt an, ob die Datei gültig ist, z. B. true|false
var_export($spl_file->getUploadExtension()); // Hochgeladene Dateierweiterung, z. B. 'jpg'
var_export($spl_file->getUploadMimeType()); // Hochgeladener Datei-MIME-Typ, z. B. 'image/jpeg'
var_export($spl_file->getUploadErrorCode()); // Abrufen des Upload-Fehlercodes, z. B. UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_CANT_WRITE
var_export($spl_file->getUploadName()); // Hochgeladener Dateiname, z. B. 'my-test.jpg'
var_export($spl_file->getSize()); // Abrufen der Dateigröße, z. B. 13364, in Bytes
var_export($spl_file->getPath()); // Abrufen des Upload-Verzeichnisses, z. B. '/tmp'
var_export($spl_file->getRealPath()); // Abrufen des temporären Dateipfads, z. B. `/tmp/workerman.upload.SRliMu`
}
return response('ok');
}
}
Hinweis:
- Nach dem Hochladen wird die Datei in eine temporäre Datei mit einem Namen wie
/tmp/workerman.upload.SRliMu
umbenannt - Die Größe der hochgeladenen Datei ist durch die defaultMaxPackageSize begrenzt, standardmäßig auf 10 MB. Sie können den Standardwert in der Datei
config/server.php
ändern, indem Siemax_package_size
anpassen. - Nach Abschluss der Anfrage wird die temporäre Datei automatisch gelöscht
- Wenn keine Datei hochgeladen wird, gibt
$request->file()
ein leeres Array zurück - Die hochgeladenen Dateien unterstützen die Methode
move_uploaded_file()
nicht. Verwenden Sie stattdessen die Methode$file->move()
, wie im folgenden Beispiel beschrieben
Abrufen einer bestimmten hochgeladenen Datei
$request->file('avatar');
Wenn die Datei existiert, wird eine Instanz von webman\Http\UploadFile
für die entsprechende Datei zurückgegeben, ansonsten null
.
Beispiel
<?php
namespace app\controller;
use support\Request;
class UploadController
{
public function file(Request $request)
{
$file = $request->file('avatar');
if ($file && $file->isValid()) {
$file->move(public_path().'/files/myfile.'.$file->getUploadExtension());
return json(['code' => 0, 'msg' => 'Erfolgreich hochgeladen']);
}
return json(['code' => 1, 'msg' => 'Datei nicht gefunden']);
}
}
Abrufen des Hosts
Abrufen der Host-Informationen der Anfrage.
$request->host();
Wenn die Adresse der Anfrage keinen Standard-Port (80 oder 443) aufweist, enthält die Host-Information möglicherweise den Port, z. B. example.com:8080
. Wenn der Port nicht benötigt wird, kann das erste Argument als true
übergeben werden.
$request->host(true);
Abrufen der Anfragemethode
$request->method();
Der zurückgegebene Wert kann GET
, POST
, PUT
, DELETE
, OPTIONS
oder HEAD
sein.
Abrufen der Anfrage-URI
$request->uri();
Gibt die URI der Anfrage zurück, einschließlich Pfad und Query-String-Teil.
Abrufen des Anfragepfads
$request->path();
Gibt den Anfragepfad zurück.
Abrufen der Anfrage-Query-String
$request->queryString();
Gibt den Query-String-Teil der Anfrage zurück.
Erhalte die Anfrage-URL
Die Methode url()
gibt die URL ohne Query
-Parameter zurück.
$request->url();
Gibt etwas ähnliches wie //www.workerman.net/workerman-chat
zurück.
Die Methode fullUrl()
gibt die URL mit Query
-Parameter zurück.
$request->fullUrl();
Gibt etwas ähnliches wie //www.workerman.net/workerman-chat?type=download
zurück.
Hinweis
url()
undfullUrl()
geben keinen Protokollteil zurück (kein http oder https).
Dies liegt daran, dass in Browsern Adressen, die mit//
beginnen, automatisch das aktuelle Protokoll der Website erkennen und automatisch eine Anfrage per http oder https senden.
Wenn Sie einen nginx-Proxy verwenden, fügen Sie proxy_set_header X-Forwarded-Proto $scheme;
zur nginx-Konfiguration hinzu. Siehe nginx-Proxy.
Auf diese Weise können Sie mit $request->header('x-forwarded-proto');
prüfen, ob es sich um http oder https handelt. Zum Beispiel:
echo $request->header('x-forwarded-proto'); // gibt http oder https aus
Erhalte die Anfrage-HTTP-Version
$request->protocolVersion();
Gibt den String 1.1
oder 1.0
zurück.
Erhalte die Anfragesitzungs-ID
$request->sessionId();
Gibt einen String aus Buchstaben und Zahlen zurück.
Erhalte die IP-Adresse des Client-Anfragers
$request->getRemoteIp();
Erhalte den Port des Client-Anfragers
$request->getRemotePort();
Erhalte die wirkliche IP-Adresse des Client-Anfragers
$request->getRealIp($safe_mode=true);
Wenn ein Projekt einen Proxy verwendet (z. B. nginx), gibt $request->getRemoteIp()
normalerweise die IP-Adresse des Proxy-Servers zurück (ähnlich wie 127.0.0.1
192.168.x.x
) und nicht die wirkliche IP-Adresse des Client-Anfragers. In diesem Fall können Sie versuchen, die wirkliche IP-Adresse des Client-Anfragers mit $request->getRealIp()
zu erhalten.
$request->getRealIp()
versucht, die wirkliche IP-Adresse aus den HTTP-Headern x-real-ip
, x-forwarded-for
, client-ip
, x-client-ip
, via
zu erhalten.
Da HTTP-Header leicht gefälscht werden können, ist die mit dieser Methode erhaltene IP-Adresse des Client-Anfragers nicht zu 100% vertrauenswürdig, insbesondere wenn
$safe_mode
auf false gesetzt ist. Eine verlässlichere Methode, die die wirkliche IP-Adresse des Client-Anfragers über einen Proxy erhält, besteht darin, die als sicher bekannte Proxy-Server-IP zu kennen und zu wissen, welcher HTTP-Header die wirkliche IP-Adresse übermittelt. Falls die IP-Adresse, die von$request->getRemoteIp()
zurückgegeben wird, als die des bekannten sicheren Proxy-Servers bestätigt wird, kann die wirkliche IP-Adresse dann über$request->header('Name des Headers mit der wirklichen IP-Adresse')
erhalten werden.
Erhalte die Server-IP-Adresse
$request->getLocalIp();
Erhalte den Server-Port
$request->getLocalPort();
Überprüfe, ob es sich um eine Ajax-Anfrage handelt
$request->isAjax();
Überprüfe, ob es sich um eine Pjax-Anfrage handelt
$request->isPjax();
Überprüfe, ob eine JSON-Antwort erwartet wird
$request->expectsJson();
Überprüfe, ob der Client eine JSON-Antwort akzeptiert
$request->acceptJson();
Erhalte den Plugin-Namen der Anfrage
Bei einer Anfrage, die kein Plugin ist, wird ein Leerstring ''
zurückgegeben.
$request->plugin;
Diese Funktion erfordert webman>=1.4.0
Erhalte den Anwendungsnamen der Anfrage
Bei einer einzelnen Anwendung wird immer ein Leerstring ''
zurückgegeben. Bei mehreren Anwendungen wird der Anwendungsnamen zurückgegeben.
$request->app;
Da Closure-Funktionen keiner Anwendung zugeordnet sind, gibt eine Anfrage von einer Closure-Route immer einen Leerstring
''
zurück.
Siehe auch Routing für Closure-Routen.
Erhalte den Namen der Controller-Klasse der Anfrage
Erhalte den Klassennamen des Controllers.
$request->controller;
Gibt etwas ähnliches wie app\controller\IndexController
zurück.
Da Closure-Funktionen keiner Controller-Klasse zugeordnet sind, gibt eine Anfrage von einer Closure-Route immer einen Leerstring
''
zurück.
Siehe auch Routing für Closure-Routen.
Erhalte den Namen der Anfrage-Methode
Erhalte den Namen der Controller-Methode der Anfrage.
$request->action;
Gibt etwas ähnliches wie index
zurück.
Da Closure-Funktionen keiner Controller-Methode zugeordnet sind, gibt eine Anfrage von einer Closure-Route immer einen Leerstring
''
zurück.
Siehe auch Routing für Closure-Routen.