Maison  >  Article  >  cadre php  >  Comment utiliser le middleware pour le traitement des requêtes dans ThinkPHP6 ?

Comment utiliser le middleware pour le traitement des requêtes dans ThinkPHP6 ?

WBOY
WBOYoriginal
2023-06-12 12:25:402414parcourir

Dans ThinkPHP6, le middleware est un outil de traitement de requêtes couramment utilisé. Grâce au middleware, nous pouvons facilement traiter les demandes pour mettre en œuvre le contrôle des autorisations, la journalisation, la vérification des demandes et d'autres fonctions, améliorant ainsi la sécurité et la maintenabilité des applications. Cet article explique comment utiliser le middleware pour le traitement des requêtes dans ThinkPHP6.

1. Qu'est-ce qu'un middleware ?

Le middleware est un gestionnaire de requêtes indépendant qui peut intercepter les requêtes envoyées par le client et les traiter. Dans ThinkPHP6, le middleware est conçu sur la base de la spécification PSR-15. Grâce au middleware, nous pouvons pré-traiter ou post-traiter les demandes pour implémenter certaines fonctions courantes, telles que la vérification de la connexion, le contrôle des autorisations, le filtrage des demandes, le traitement des réponses, etc.

2. Utilisation du middleware ThinkPHP6

  1. Création d'un middleware

Dans ThinkPHP6, vous pouvez créer rapidement un middleware via des outils de ligne de commande. Utilisez la commande suivante pour créer un middleware nommé CheckAuth dans le répertoire app/middleware.

php think make:middleware CheckAuth

La classe middleware CheckAuth créée est la suivante :

<?php

namespace appmiddleware;

class CheckAuth
{
    public function handle($request, Closure $next)
    {
        // 执行中间件操作

        return $next($request);
    }
}

Dans le code ci-dessus, la classe middleware doit contenir la méthode handle. La méthode handle accepte deux paramètres : $request et $next, où $request est l'objet de la requête et $next est la méthode de traitement du prochain middleware ou contrôleur. Dans la méthode handle, nous pouvons effectuer un prétraitement sur l'objet $request, puis utiliser return $next($request) pour appeler la méthode de traitement du prochain middleware ou contrôleur.

  1. Enregistrer le middleware

Après avoir créé le middleware, vous devez l'enregistrer dans l'application. Dans ThinkPHP6, les middlewares peuvent être enregistrés via la configuration de l'application, la définition de route et l'annotation du contrôleur.

2.1 Configuration de l'application

Vous pouvez configurer un middleware global ou définir un middleware à la demande dans le fichier de configuration de l'application config/app.php.

// 全局中间件
'middleware' => [
    appmiddlewareCheckAuth::class,
],

// 按需设置中间件
'route' => [
    // Route::group 也支持
    'blog/detail' => ['appmiddlewareCheckAuth'],
]

Dans le code ci-dessus, le middleware peut être enregistré globalement à l'aide de l'élément de configuration du middleware. Le nom de classe de chaque middleware est séparé par des virgules. Dans l'élément de configuration de la route, un middleware peut être spécifié pour différentes routes.

2.2 Définition de la route

Vous pouvez spécifier un middleware dans la méthode Route::rule ou la méthode Route::group.

use thinkacadeRoute;

Route::rule('blog/detail', 'blog/detail', 'GET')->middleware('appmiddlewareCheckAuth');

Dans le code ci-dessus, nous avons ajouté la méthode middleware pour spécifier le middleware lors de l'appel de la méthode Route::rule.

2.3 Annotations du contrôleur

Vous pouvez spécifier un middleware dans les annotations du contrôleur.

namespace appcontroller;

/**
 * @middleware(appmiddlewareCheckAuth::class)
 */
class Blog
{
    public function detail()
    {
        // 控制器的处理逻辑
    }
}

Dans le code ci-dessus, nous avons ajouté l'attribut middleware à l'annotation du contrôleur pour spécifier le middleware.

  1. Ordre d'exécution du middleware

Dans ThinkPHP6, le middleware est exécuté dans l'ordre d'enregistrement, d'abord enregistré et exécuté, puis enregistré et exécuté.

Dans la configuration de l'application et les annotations du contrôleur, nous pouvons utiliser la méthode Middleware::class pour spécifier l'ordre d'exécution du middleware. Comme indiqué ci-dessous :

// 全局中间件按照顺序执行
'middleware' => [
    appmiddlewareLog::class,
    appmiddlewareCheckAuth::class,
],

// 按需设置中间件按照顺序执行
'route' => [
    'blog/detail' => ['appmiddlewareLog', 'appmiddlewareCheckAuth']
],

// 控制器注解中间件按照顺序执行
namespace appcontroller;

/**
 * @middleware([appmiddlewareLog::class, appmiddlewareCheckAuth::class])
 */
class Blog
{
    public function detail()
    {
        // 控制器的处理逻辑
    }
}

Dans le code ci-dessus, nous avons spécifié la méthode Middleware::class dans l'ordre d'enregistrement du middleware.

  1. Passage de paramètres du middleware

Le middleware peut partager des données via le passage de paramètres. Dans la méthode handle, nous pouvons ajouter des propriétés, des méthodes ou des paramètres à l'objet $request, puis transmettre l'objet $request au prochain middleware ou contrôleur pour réaliser le partage de données.

Par exemple, dans l'exemple suivant, nous définissons l'attribut $name dans le premier middleware et le transmettons au deuxième middleware et au contrôleur afin qu'ils puissent utiliser l'attribut.

<?php

namespace appmiddleware;

class CheckAuth
{
    public function handle($request, Closure $next, $name)
    {
        $request->name = $name;

        return $next($request);
    }
}

class Log
{
    public function handle($request, Closure $next)
    {
        echo 'name:' . $request->name . '<br>';
        return $next($request);
    }
}

namespace appcontroller;

class Blog
{
    public function detail(Request $request)
    {
        echo 'name:' . $request->name . '<br>';
        // 控制器的处理逻辑
    }
}

// 路由配置文件
use thinkacadeRoute;

Route::rule('blog/detail', 'blog/detail', 'GET')
->middleware(['appmiddlewareCheckAuth:name', 'appmiddlewareLog']);

Dans le code ci-dessus, nous définissons l'attribut $name dans la méthode handle de la classe CheckAuth et l'enregistrons dans l'objet $request. Dans la méthode handle de la classe Log et dans le contrôleur Blog, nous pouvons accéder à cette propriété via l'objet $request.

Dans la définition de la route, nous utilisons la fonction de transmission de paramètres du middleware pour transmettre le nom du paramètre au middleware CheckAuth. Dans les paramètres du middleware à la demande, vous pouvez également utiliser la méthode Middleware::class pour spécifier les paramètres du middleware.

5. Résumé

Le middleware est un outil de traitement des demandes couramment utilisé qui peut pré-traiter ou post-traiter les demandes des clients avant et après la demande. Dans ThinkPHP6, le middleware est conçu sur la base de la spécification PSR-15. Grâce au middleware, nous pouvons facilement implémenter des fonctions telles que le contrôle des autorisations, la journalisation et la vérification des demandes. Le middleware est exécuté dans l'ordre dans lequel il est enregistré et les données peuvent être partagées entre les middlewares via le passage de paramètres. Grâce à l’utilisation flexible du middleware, nous pouvons améliorer la sécurité, la maintenabilité et l’évolutivité des applications.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn