Description

Obtenir l'objet de requête

Webman injecte automatiquement l'objet de requête dans le premier paramètre de la méthode d'action, par exemple

Exemple

<?php
namespace app\controller;

use support\Request;

class UserController
{
    public function hello(Request $request)
    {
        $default_name = 'webman';
        // Obtenir le paramètre name depuis la requête GET, s'il n'est pas fourni, retourner $default_name
        $name = $request->get('name', $default_name);
        // Retourner une chaîne au navigateur
        return response('hello ' . $name);
    }
}

Avec l'objet $request, nous pouvons obtenir toutes les données liées à la requête.

Parfois, nous voulons obtenir l'objet $request de la requête actuelle dans d'autres classes. Dans ce cas, il suffit d'utiliser la fonction d'assistance request() ;

Obtenir les paramètres de requête GET

Obtenir l'ensemble du tableau GET

$request->get();

Si la requête ne contient pas de paramètres GET, cela retourne un tableau vide.

Obtenir une valeur dans le tableau GET

$request->get('name');

Si cette valeur n'est pas dans le tableau GET, cela retourne null.

Vous pouvez également passer une valeur par défaut en tant que deuxième paramètre à la méthode get, si la valeur correspondante n'est pas trouvée dans le tableau GET, cela retourne la valeur par défaut. Par exemple :

$request->get('name', 'tom');

Obtenir les paramètres de requête POST

Obtenir l'ensemble du tableau POST

$request->post();

Si la requête ne contient pas de paramètres POST, cela retourne un tableau vide.

Obtenir une valeur dans le tableau POST

$request->post('name');

Si cette valeur n'est pas dans le tableau POST, cela retourne null.

Comme avec la méthode GET, vous pouvez également passer une valeur par défaut en tant que deuxième paramètre à la méthode post, si la valeur correspondante n'est pas trouvée dans le tableau POST, cela retourne la valeur par défaut. Par exemple :

$request->post('name', 'tom');

Fonction d'assistance input()

Semblable à la fonction $request->input(), peut obtenir tous les paramètres, la fonction d'assistance input() a deux paramètres :

  1. name : Le nom du paramètre à obtenir (s'il est vide, cela peut obtenir un tableau de tous les paramètres)
  2. default : Valeur par défaut (utilisée si l'obtention par le premier paramètre échoue)

Par exemple

// Obtenir le paramètre name
$name = input('name');
// Obtenir le paramètre name, s'il n'existe pas, utilise la valeur par défaut
$name = input('name','张三');
// Obtenir tous les paramètres
$all_params = input();

Obtenir le corps brut de la requête POST

$post = $request->rawBody();

Cette fonctionnalité est similaire à l'opération file_get_contents("php://input"); dans php-fpm. Elle est utilisée pour obtenir le corps brut de la requête HTTP. Cela est utile lors de l'obtention de données de requête POST dans un format autre que application/x-www-form-urlencoded.

Obtenir les en-têtes

Obtenir l'ensemble du tableau des en-têtes

$request->header();

Si la requête ne contient pas de paramètres d'en-tête, cela retourne un tableau vide. Notez que toutes les clés sont en minuscules.

Obtenir une valeur dans le tableau des en-têtes

$request->header('host');

Si cette valeur n'est pas dans le tableau des en-têtes, cela retourne null. Notez que toutes les clés sont en minuscules.

Comme avec la méthode GET, vous pouvez également passer une valeur par défaut en tant que deuxième paramètre à la méthode header, si la valeur correspondante n'est pas trouvée dans le tableau des en-têtes, cela retourne la valeur par défaut. Par exemple :

$request->header('host', 'localhost');

Obtenir les cookies

Obtenir l'ensemble du tableau des cookies

$request->cookie();

Si la requête ne contient pas de paramètres de cookie, cela retourne un tableau vide.

Obtenir une valeur dans le tableau des cookies

$request->cookie('name');

Si cette valeur n'est pas dans le tableau des cookies, cela retourne null.

Comme avec la méthode GET, vous pouvez également passer une valeur par défaut en tant que deuxième paramètre à la méthode cookie, si la valeur correspondante n'est pas trouvée dans le tableau des cookies, cela retourne la valeur par défaut. Par exemple :

$request->cookie('name', 'tom');

Obtenir toutes les entrées

Cela inclut un ensemble de post et de get.

$request->all();

Obtenir une valeur d'entrée spécifiée

Pour obtenir une valeur d'un ensemble de post et de get.

$request->input('name', $default_value);

Obtenir certaines données d'entrée

Pour obtenir certaines données dans l'ensemble de post et get.

// Obtenir un tableau composé de username et password, ignorer si la clé correspondante n'existe pas
$only = $request->only(['username', 'password']);
// Obtenir toutes les entrées sauf avatar et age
$except = $request->except(['avatar', 'age']);

Obtenir des entrées via des paramètres de contrôleur

<?php
namespace app\controller;
use support\Response;

class UserController
{
    public function create(string $name, int $age = 18): Response
    {
        return json(['name' => $name, 'age' => $age]);
    }
}

La logique est similaire à

<?php
namespace app\controller;
use support\Request;
use support\Response;

class UserController
{
    public function create(Request $request): Response
    {
        $name = $request->input('name');
        $age = (int)$request->input('age', 18);
        return json(['name' => $name, 'age' => $age]);
    }
}

Pour plus d'informations, veuillez consulter lien de liaison des paramètres de contrôleur

Obtenir des fichiers téléchargés

Avertissement
Les fichiers téléchargés doivent utiliser un formulaire au format multipart/form-data.

Obtenir l'ensemble du tableau de fichiers téléchargés

$request->file();

Le formulaire ressemble à ceci :

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

Le format retourné par $request->file() ressemble à ceci :

array (
    'file1' => object(webman\Http\UploadFile),
    'file2' => object(webman\Http\UploadFile)
)

C'est un tableau d'instances de webman\Http\UploadFile. La classe webman\Http\UploadFile hérite de la classe PHP intégrée SplFileInfo et fournit plusieurs méthodes utiles.

<?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()); // Le fichier est-il valide, par exemple true|false
            var_export($spl_file->getUploadExtension()); // Extension du fichier téléchargé, par exemple 'jpg'
            var_export($spl_file->getUploadMimeType()); // Type mime du fichier téléchargé, par exemple 'image/jpeg'
            var_export($spl_file->getUploadErrorCode()); // Obtenir le code d'erreur de téléchargement, par exemple UPLOAD_ERR_NO_TMP_DIR UPLOAD_ERR_NO_FILE UPLOAD_ERR_CANT_WRITE
            var_export($spl_file->getUploadName()); // Nom du fichier téléchargé, par exemple 'my-test.jpg'
            var_export($spl_file->getSize()); // Obtenir la taille du fichier, par exemple 13364, en octets
            var_export($spl_file->getPath()); // Obtenir le répertoire de téléchargement, par exemple '/tmp'
            var_export($spl_file->getRealPath()); // Obtenir le chemin du fichier temporaire, par exemple '/tmp/workerman.upload.SRliMu'
        }
        return response('ok');
    }
}

Remarque :

  • Le fichier téléchargé sera nommé un fichier temporaire, semblable à /tmp/workerman.upload.SRliMu.
  • La taille maximale des fichiers téléchargés est limitée par defaultMaxPackageSize, par défaut 10M, peut être modifiée dans le fichier config/server.php pour changer max_package_size.
  • Le fichier temporaire sera automatiquement supprimé après la fin de la requête.
  • Si aucune fichier n'est téléchargé, $request->file() retourne un tableau vide.
  • Les fichiers téléchargés ne supportent pas la méthode move_uploaded_file(), veuillez utiliser la méthode $file->move() à la place, voir l'exemple ci-dessous.

Obtenir un fichier téléchargé spécifique

$request->file('avatar');

Si le fichier existe, cela retourne l'instance webman\Http\UploadFile correspondante, sinon cela retourne null.

Exemple

<?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' => 'upload success']);
        }
        return json(['code' => 1, 'msg' => 'file not found']);
    }
}

Obtenir l'hôte

Obtenir les informations de l'hôte de la requête.

$request->host();

Si l'adresse de la requête est sur un port non standard, comme 80 ou 443, les informations d'hôte peuvent inclure le port, par exemple example.com:8080. Si le port n'est pas nécessaire, le premier paramètre peut être passé comme true.

$request->host(true);

Obtenir la méthode de requête

 $request->method();

La valeur de retour peut être l'un de GET, POST, PUT, DELETE, OPTIONS, HEAD.

Obtenir l'URI de la requête

$request->uri();

Retourne l'URI de la requête, y compris les parties path et queryString.

Obtenir le chemin de la requête

$request->path();

Retourne la partie path de la requête.

Obtenir la queryString de la requête

$request->queryString();

Retourne la partie queryString de la requête.

Obtenir l'URL de la requête

La méthode url() retourne l'URL sans les paramètres Query.

$request->url();

Retourne une valeur similaire à //www.workerman.net/workerman-chat.

La méthode fullUrl() retourne l'URL avec les paramètres Query.

$request->fullUrl();

Retourne une valeur similaire à //www.workerman.net/workerman-chat?type=download.

Remarque
Les méthodes url() et fullUrl() ne retournent pas la partie protocole (ne retournent pas http ou https).
Cela est dû au fait que dans les navigateurs, une adresse commençant par //example.com reconnaît automatiquement le protocole du site actuel, initiant automatiquement la requête en http ou https.

Si vous utilisez un proxy nginx, veuillez ajouter proxy_set_header X-Forwarded-Proto $scheme; à la configuration nginx, voir la documentation du proxy nginx,
vous pourrez ainsi utiliser $request->header('x-forwarded-proto'); pour déterminer s'il s'agit de http ou https, par exemple :

echo $request->header('x-forwarded-proto'); // Affiche http ou https

Obtenir la version HTTP de la requête

$request->protocolVersion();

Retourne une chaîne 1.1 ou 1.0.

Obtenir l'ID de session de la requête

$request->sessionId();

Retourne une chaîne composée de lettres et de chiffres.

Obtenir l'IP du client de la requête

$request->getRemoteIp();

Obtenir le port du client de la requête

$request->getRemotePort();

Obtenir l'IP réelle du client de la requête

$request->getRealIp($safe_mode=true);

Lorsque le projet utilise un proxy (comme nginx), l'utilisation de $request->getRemoteIp() retourne souvent l'IP du serveur proxy (comme 127.0.0.1 192.168.x.x) et non l'IP réelle du client. Dans ce cas, vous pouvez essayer d'utiliser $request->getRealIp() pour obtenir l'IP réelle du client.

La méthode $request->getRealIp() tentera d'obtenir l'IP réelle à partir des en-têtes HTTP x-forwarded-for, x-real-ip, client-ip, x-client-ip, et via.

Étant donné que les en-têtes HTTP peuvent facilement être falsifiés, l'IP du client obtenue par cette méthode n'est pas à 100 % fiable, surtout lorsque $safe_mode est faux. La méthode la plus fiable pour obtenir l'IP réelle du client à travers un proxy est de connaître les IP des serveurs proxy sécurisés et de savoir exactement quel en-tête HTTP transporte l'IP réelle. Si l'IP retournée par $request->getRemoteIp() est confirmée comme étant un serveur proxy sécurisé connu, vous pourrez alors obtenir l'IP réelle via $request->header('HTTP_HEADER_TRANSPORTANT_L_IP_REELLE').

Obtenir l'IP du serveur

$request->getLocalIp();

Obtenir le port du serveur

$request->getLocalPort();

Vérifier si c'est une requête ajax

$request->isAjax();

Vérifier si c'est une requête pjax

$request->isPjax();

Vérifier si une réponse JSON est attendue

$request->expectsJson();

Vérifier si le client accepte une réponse JSON

$request->acceptJson();

Obtenir le nom du plugin de la requête

Les demandes sans plugin retournent une chaîne vide ''.

$request->plugin;

Obtenir le nom de l'application de la requête

Pour une application unique, cela retourne toujours une chaîne vide '', dans le cas de plusieurs applications cela retourne le nom de l'application.

$request->app;

Étant donné que les fonctions de fermeture n'appartiennent à aucune application, les requêtes provenant de routes de fermeture retourneront toujours une chaîne vide '' pour $request->app.
Pour plus d'informations sur les routes de fermeture, voir les routes.

Obtenir le nom de la classe du contrôleur de la requête

Obtenir le nom de la classe correspondant au contrôleur.

$request->controller;

Retourne une valeur similaire à app\controller\IndexController.

Étant donné que les fonctions de fermeture n'appartiennent à aucun contrôleur, les requêtes provenant de routes de fermeture retourneront toujours une chaîne vide '' pour $request->controller.
Pour plus d'informations sur les routes de fermeture, voir les routes.

Obtenir le nom de la méthode de la requête

Obtenir le nom de la méthode du contrôleur correspondant à la requête.

$request->action;

Retourne une valeur similaire à index.

Étant donné que les fonctions de fermeture n'appartiennent à aucun contrôleur, les requêtes provenant de routes de fermeture retourneront toujours une chaîne vide '' pour $request->action.
Pour plus d'informations sur les routes de fermeture, voir les routes.

Réécrire les paramètres

Parfois, nous voulons réécrire les paramètres de la requête, par exemple filtrer la requête, puis réaffecter les valeurs à l'objet de requête. Dans ce cas, nous pouvons utiliser les méthodes setGet(), setPost(), setHeader().

Réécrire les paramètres GET

$request->get(); // Supposons obtenir ['name' => 'tom', 'age' => 18]
$request->setGet(['name' => 'tom']);
$request->get(); // Finalement obtient ['name' => 'tom']

Remarque
Comme indiqué dans l'exemple, setGet() réécrit tous les paramètres GET, setPost() et setHeader() ont le même comportement.

Réécrire les paramètres POST

$post = $request->post();
foreach ($post as $key => $value) {
    $post[$key] = htmlspecialchars($value);
}
$request->setPost($post);
$request->post(); // Obtient les paramètres POST filtrés

Réécrire les paramètres d'en-tête

$request->setHeader(['host' => 'example.com']);
$request->header('host'); // Affiche example.com