国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison développement back-end tutoriel php PHP Master | Travailler avec un middleware mince

PHP Master | Travailler avec un middleware mince

Feb 24, 2025 am 09:00 AM

Slim Framework Middleware: Construire des applications de micro PHP puissantes

Slim est un puissant Mini Framework PHP, où les fonctionnalités du middleware permettent la mise en ?uvre de divers services de style filtre tels que l'authentification et la mise en cache dans les applications. Le middleware résume les applications et peut affecter l'environnement de l'application ainsi que les objets de demande et de réponse.

Points clés:

  • Le middleware de Slim est une fonctionnalité puissante qui permet la mise en ?uvre de divers services de style filtre tels que l'authentification et la mise en cache. Le middleware résume les applications et peut affecter l'environnement, la demande et la réponse des objets de l'application.
  • Pour implémenter middleware dans Slim, vous devez écrire une classe qui étend la classe SlimMiddleware et remplacer la méthode call(). Cette méthode est le point d'entrée du middleware, à partir duquel vous pouvez retourner (interrompre le processus d'exécution) ou appeler la couche suivante. Le middleware peut ensuite manipuler l'en-tête et le corps de la réponse.
  • Utilisez la méthode Slim add() pour enregistrer le middleware dans l'application SLIM. Plusieurs middleware peuvent être enregistrés par des appels ultérieurs à la méthode add(). Le middleware doit être ajouté dans l'ordre opposé de l'ordre des appels, car le nouveau middleware entourera tout middleware précédemment ajouté. La configuration du middleware est généralement effectuée via le constructeur de services.

Compréhension du middleware mince

La documentation mince compare l'application mince aux oignons, chaque couche de l'oignon est middleware. Il s'agit d'une métaphore appropriée. Pour mieux le comprendre, supposons que nous écrivons une application qui utilise l'authentification et la mise en cache. Notre architecture peut ressembler à ceci:

PHP Master | Working with Slim Middleware

Le code responsable de la génération du contenu de la page est enveloppé dans plusieurs couches de middleware, dont les plus importantes sont la logique d'authentification et la logique de cache. Le processus d'exécution passe par chaque couche, permettant le flux vers la couche suivante ou le transfert. Vérifiez d'abord si l'utilisateur a passé l'authentification. Sinon, le processus est interrompu et l'état HTTP 401 est renvoyé. Vérifiez ensuite si une copie en cache du contenu peut être utilisée. Si c'est le cas, le processus est interrompu à l'aide de la copie en cache de la page. Il peut y avoir d'autres couches de middleware jusqu'à ce que le processus atteigne enfin la logique responsable de la génération de la page. Lorsque nos méthodes de middleware reviendront, le processus d'exécution bouillonnera à travers eux. Par exemple, le reste de la logique du middleware de cache mettra en cache le contenu de la page pour les recherches ultérieures.

Implémentation du middleware

Pour comprendre comment implémenter des middleware personnalisés, jetons un coup d'?il au code qui peut être utilisé comme middleware de cache mentionné ci-dessus. Il y a en fait très peu d'exigences pour implémenter tout composant de base middleware Slim. Nous avons juste besoin d'écrire une classe qui étend la classe SlimMiddleware et remplacer la méthode call(). Le point d'entrée du middleware est cette méthode call(), à partir de laquelle nous pouvons retourner (et donc interrompre le processus d'exécution) ou appeler la couche suivante.

<?php namespace MyMiddleware;

class Cache extends SlimMiddleware
{
    protected $db;

    public function __construct(PDO $db)
    {
        $this->db = $db;
    }

    public function call()
    {
        $key = $this->app->request()->getResourceUri();
        $rsp = $this->app->response();

        $data = $this->fetch($key);
        if ($data) {
            // 緩存命中...返回緩存的內(nèi)容
            $rsp["Content-Type"] = $data["content_type"];
            $rsp->body($data["body"]);
            return;
        }

        // 緩存未命中...繼續(xù)生成頁面
        $this->next->call();

        if ($rsp->status() == 200) {
            // 緩存結(jié)果以供將來查找
            $this->save($key, $rsp["Content-Type"], $rsp->body());
        }
    }

    protected function fetch($key)
    {
        $query = "SELECT content_type, body FROM cache
            WHERE key = " . $this->db->quote($key);
        $result = $this->db->query($query);
        $row = $result->fetch(PDO::FETCH_ASSOC);
        $result->closeCursor();
        return $row;
    }

    protected function save($key, $contentType, $body)
    {
        $query = sprintf("INSERT INTO cache (key, content_type, body)
            VALUES (%s, %s, %s)",
            $this->db->quote($key),
            $this->db->quote($contentType),
            $this->db->quote($body)
        );
        $this->db->query($query);
    }

}

call() Méthode Vérifiez d'abord si le contenu est disponible dans le cache. Dans l'affirmative, il définit l'en-tête et le corps de la réponse Content-Type, puis revient, en court-circuit ainsi le pipeline. Si le cache manque, appelez $this->next->call() pour appeler la couche middleware suivante. Lorsque le processus revient à ce point à partir d'autres appels de middleware, l'état de la demande est rapidement vérifié et les données pertinentes sont mises en cache pour les recherches futures. étant donné que cette classe étend la classe Middleware de Slim, elle peut accéder aux instances de l'application SLIM via $this->app, accédant ainsi indirectement à des objets de réponse et de demande. Nous pouvons influencer l'en-tête de la réponse en le traitant comme un tableau et influencer le corps de la réponse à travers sa méthode body(). Les méthodes fetch() et save() sont des méthodes d'assistance protégées, elles enveloppent simplement les requêtes de base de données pour trouver et persister du contenu. Je les ai inclus ici juste pour compléter les exemples. Il suppose qu'il existe un tableau nommé cache avec des colonnes key, content_type et body. Selon vos besoins, votre mécanisme de persistance peut varier. De plus, le cache expiré (pour la simplicité) n'est pas montré ici, bien que vous puissiez facilement le fusionner vous-même.

Enregistrement et configuration du middleware

Enregistrer le middleware à l'aide de la méthode add() de Slim.

<?php require_once "../vendor/autoload.php";

$app = new SlimSlim();
$app->add(new MyMiddlewareCache($db));

Bien s?r, plusieurs middleware peuvent être enregistrés via la méthode d'appel suivante add(). étant donné que le nouveau middleware entourera tout middleware précédemment ajouté, cela signifie qu'ils doivent être ajoutés dans l'ordre opposé de l'appel.

<?php $app = new SlimSlim();
$app->add(new MyMiddlewareCache($db));
$app->add(new MyMiddlewareAuth($db));
// ...

Dans l'exemple ci-dessus, le middleware Cache enveloppe l'application SLIM, puis le middleware Auth enveloppe le Cache. Lorsque $app->run() est appelé, le processus d'exécution sera similaire à celui illustré dans la figure ci-dessus, entrant d'abord dans le middleware d'authentification, puis fonctionnant jusqu'au itinéraire. La configuration du middleware est généralement effectuée via le constructeur de services. Dans notre exemple, je passe simplement une connexion de base de données active afin qu'il puisse accéder à la table en cache, mais vous pouvez écrire votre classe pour accepter toute information dont vous pourriez avoir besoin pour personnaliser son comportement. Par exemple, le composant peut être remplacé pour accepter un objet de gestionnaire qui expose les méthodes fetch() et save(); Fournissez des fonctionnalités dans le cadre de la configuration des composants.

Conclusion

J'ai trouvé que le middleware est une solution élégante pour implémenter tous les aspects des applications minces. Dans cet article, j'explique comment fonctionne l'architecture de middleware et ce qu'il faut pour implémenter votre propre middleware. Il existe un petit référentiel supplémentaire avec quelques exemples de middleware de base tels que la protection CSRF et l'authentification HTTP. J'ai refactorisé l'exemple ici et soumis une demande de traction, donc si vous avez écrit un service middleware utile, pourquoi ne pas envisager de le soumettre à votre projet afin que d'autres puissent également en bénéficier?

(image de Fotolia)

(Ce qui suit est la FAQ, qui a été ajustée et complétée en fonction du contenu d'origine, et un contenu en double a été rationalisé)

FAQ sur middleware midle

  • Qu'est-ce que le middleware mince et pourquoi est-il important? Slim Middleware est un outil puissant dans le framework Slim qui vous permet de manipuler les demandes et les réponses HTTP. Il est important car il fournit un moyen d'exécuter du code avant et après l'application mince pour modifier les demandes entrantes ou les réponses sortantes. Cela peut être utilisé à diverses fins telles que l'authentification, la mise en cache ou la journalisation.

  • Comment créer du middleware dans Slim? La création d'un middleware dans SLIM implique de définir une classe qui implémente MiddlewareInterface. Cette classe doit avoir une méthode appelée process() qui re?oit ServerRequestInterface et RequestHandlerInterface. La méthode process() est l'endroit où vous pouvez manipuler les demandes et les réponses.

  • Comment ajouter du middleware à mon application mince? Vous pouvez utiliser la méthode add() pour ajouter du middleware à votre application mince. Cette méthode re?oit une instance de la classe de middleware. Le middleware est exécuté dans l'ordre d'addition, de sorte que le dernier middleware ajouté sera le premier middleware à exécuter.

  • Puis-je utiliser du middleware pour des itinéraires spécifiques dans SLIM? Oui, le middleware peut être appliqué à des itinéraires spécifiques dans SLIM. Cela se fait en appelant la méthode Route sur l'objet App au lieu de l'objet add(). Cela vous permet d'avoir un middleware qui n'affecte que certains itinéraires.

  • Quelle est la différence entre le middleware global et le middleware de routage? Le middleware global est appliqué à chaque demande traitée par l'application SLIM, tandis que le middleware de routage est appliqué à uniquement des itinéraires spécifiques. Cela vous permet d'utiliser différents middleware pour différentes parties de votre application.

  • Comment utiliser le middleware pour effectuer la gestion des erreurs dans SLIM? En attrapant des exceptions dans la classe de middleware, vous pouvez utiliser le middleware pour effectuer une gestion des erreurs dans Slim. Vous pouvez ensuite modifier la réponse pour inclure un message d'erreur ou rediriger l'utilisateur vers la page d'erreur.

  • Pouvez-vous authentifier les utilisateurs en middleware? Oui, le middleware est souvent utilisé pour l'authentification dans Slim. Cela peut être fait en vérifiant une session ou un jeton valide dans le middleware et renvoie une réponse d'erreur si l'utilisateur n'est pas authentifié.

  • Comment utiliser le middleware pour se connecter mince? En écrivant des informations sur les demandes et les réponses à un fichier journal, le middleware peut être utilisé pour la journalisation. Ceci est très utile pour déboguer ou surveiller votre application.

  • Puis-je utiliser du middleware tiers avec Slim? Oui, Slim prend en charge le middleware tiers. Cela peut être ajouté à votre application comme votre propre middleware. Cela vous permet de tirer parti des middleware existants pour effectuer des taches courantes.

  • Comment tester mon middleware mince? Tester Slim Middleware consiste à créer des demandes et des réponses simulées et à les transmettre à votre middleware. Vous pouvez ensuite affirmer que le middleware se comporte comme prévu, comme modifier une demande ou une réponse, ou lancer une exception.

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 de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les meilleures pratiques pour verser une API basée sur PHP? Quelles sont les meilleures pratiques pour verser une API basée sur PHP? Jun 14, 2025 am 12:27 AM

Toversionaphp basé sur la performance, utilisation de la Version basée sur la croissance et la SEAFROURSE, Séparable CodééToAvoid Conclict, dépréciant les versions avec la Communication et la vision de la ConsiderCustomEnlywhencesseary.

Comment mettre en ?uvre l'authentification et l'autorisation dans PHP? Comment mettre en ?uvre l'authentification et l'autorisation dans PHP? Jun 20, 2025 am 01:03 AM

ToseCurelyHandleAuthentication andAuthorizationInPhp, suivitheSesteps: 1.AlwayShashPasswordSwithPassword_Hash () etverifyusingPassword_verify (), usePreparedStatementStopReventsQLendiject, andstoreSerDatain $ _SessionAfterLogin.2

Quelles sont les différences entre les paradigmes de programmation procéduraux et orientés objet en PHP? Quelles sont les différences entre les paradigmes de programmation procéduraux et orientés objet en PHP? Jun 14, 2025 am 12:25 AM

ProcéduralandObject-OriendEdProgramming (OOP) inphpdiffersignifiancely instructure, réutilisabilité et datahandling.1.ProceduralProgrammingususFonctionnets organisé sécrégence, approprié modéliste.2.

Quelles sont les références faibles (faiblemap) en PHP, et quand pourraient-ils être utiles? Quelles sont les références faibles (faiblemap) en PHP, et quand pourraient-ils être utiles? Jun 14, 2025 am 12:25 AM

PhpDoOesNothAveAbilt-InweakMapButoffersWeakreferenceForsiMarFonctionality.1.WeakReferenceallowsholdingreferences withoutpreventinggarbageCollection.2.itisationfulforcaching, les événements, et lametadatawithoutaffectingobjectlifecycles.3.

Comment pouvez-vous gérer les téléchargements de fichiers en toute sécurité dans PHP? Comment pouvez-vous gérer les téléchargements de fichiers en toute sécurité dans PHP? Jun 19, 2025 am 01:05 AM

Pour gérer en toute sécurité les téléchargements de fichiers dans PHP, le noyau consiste à vérifier les types de fichiers, à renommer les fichiers et à restreindre les autorisations. 1. Utilisez finfo_file () pour vérifier le type de mime réel, et seuls des types spécifiques tels que l'image / jpeg sont autorisés; 2. Utilisez Uniqid () pour générer des noms de fichiers aléatoires et les stocker dans le répertoire racine non Web; 3. Limiter la taille du fichier via les formulaires PHP.ini et HTML et définir les autorisations de répertoire sur 0755; 4. Utilisez Clamav pour scanner les logiciels malveillants pour améliorer la sécurité. Ces étapes empêchent efficacement les vulnérabilités de sécurité et garantissent que le processus de téléchargement de fichiers est s?r et fiable.

Quelles sont les différences entre == (comparaison lache) et === (comparaison stricte) en PHP? Quelles sont les différences entre == (comparaison lache) et === (comparaison stricte) en PHP? Jun 19, 2025 am 01:07 AM

En PHP, la principale différence entre == et == est la rigueur de la vérification des types. == La conversion de type sera effectuée avant la comparaison, par exemple, 5 == "5" Renvoie True, et === Demande que la valeur et le type soient les mêmes avant que True sera renvoyé, par exemple, 5 === "5" Renvoie False. Dans les scénarios d'utilisation, === est plus sécurisé et doit être utilisé en premier, et == n'est utilisé que lorsque la conversion de type est requise.

Comment pouvez-vous interagir avec les bases de données NoSQL (par exemple, MongoDB, redis) de PHP? Comment pouvez-vous interagir avec les bases de données NoSQL (par exemple, MongoDB, redis) de PHP? Jun 19, 2025 am 01:07 AM

Oui, PHP peut interagir avec les bases de données NoSQL comme MongoDB et Redis à travers des extensions ou des bibliothèques spécifiques. Tout d'abord, utilisez le pilote MongoDBPHP (installé via PECL ou Composer) pour créer des instances clients et faire fonctionner des bases de données et des collections, en prenant en charge l'insertion, la requête, l'agrégation et d'autres opérations; Deuxièmement, utilisez la bibliothèque Predis ou l'extension PHPREDIS pour vous connecter à Redis, effectuer des paramètres et des acquisitions de valeur clé, et recommander PHPredis pour des scénarios à haute performance, tandis que Predis est pratique pour un déploiement rapide; Les deux conviennent aux environnements de production et sont bien documentés.

Comment effectuer des opérations arithmétiques en php (, -, *, /,%)? Comment effectuer des opérations arithmétiques en php (, -, *, /,%)? Jun 19, 2025 pm 05:13 PM

Les méthodes d'utilisation des opérations mathématiques de base en PHP sont les suivantes: 1. Les signes d'addition prennent en charge les entiers et les nombres à virgule flottante, et peuvent également être utilisés pour les variables. Les numéros de cha?ne seront automatiquement convertis mais non recommandés en dépendances; 2. Les signes de soustraction utilisent - les signes, les variables sont les mêmes et la conversion de type est également applicable; 3. Les panneaux de multiplication utilisent * les panneaux, qui conviennent aux nombres et aux cha?nes similaires; 4. La division utilise / signes, qui doit éviter de diviser par zéro, et noter que le résultat peut être des nombres à virgule flottante; 5. Prendre les signes du module peut être utilisé pour juger des nombres impairs et uniformes, et lors du traitement des nombres négatifs, les signes restants sont cohérents avec le dividende. La clé pour utiliser correctement ces opérateurs est de s'assurer que les types de données sont clairs et que la situation limite est bien gérée.

See all articles