Maison >développement back-end >tutoriel php >Pipeline de traitement des requêtes php laravel (modèle de décorateur)

Pipeline de traitement des requêtes php laravel (modèle de décorateur)

angryTom
angryTomavant
2019-11-26 16:45:363408parcourir

Le middleware de Laravel utilise le modèle décorateur. Par exemple, vérifiez le mode de maintenance, le cryptage des cookies, les sessions ouvertes, etc. Certains de ces processus sont avant la réponse, et d'autres après la réponse. Le mode décorateur est utilisé pour réduire ou ajouter dynamiquement des fonctions, ce qui améliore considérablement l'évolutivité du framework.

Pipeline de traitement des requêtes php laravel (modèle de décorateur)

Ce qui suit est un exemple simple d'utilisation du modèle de décorateur pour maintenir l'implémentation de Session.

1. Le mode décorateur n'est pas utilisé et le module (méthode WelcomeController::index) doit être modifié.

class WelcomeController
{
    public function index()
    {
        echo 'session start.', PHP_EOL;
        echo 'hello!', PHP_EOL;
        echo 'session close.', PHP_EOL;
    }
}

2. Utilisez le mode décorateur, $pipeList représente le tableau middleware qui doit être exécuté. La clé réside dans l’utilisation de la fonction array_reduce.

class WelcomeController
{
    public function index()
    {
        echo 'hello!', PHP_EOL;
    }
}
interface Middleware
{
    public function handle(Closure $next);
}
class Seesion implements Middleware
{
    public function handle(Closure $next)
    {
        echo 'session start.', PHP_EOL;
        $next();
        echo 'session close.', PHP_EOL;
    }
}
$pipeList = [
    "Seesion",
];
 
function _go($step, $className)
{
    return function () use ($step, $className) {
        $o = new $className();
        return $o->handle($step);
    };
}
 
$go = array_reduce($pipeList, '_go', function () {
    return call_user_func([new WelcomeController(), 'index']);
});
$go();

Pour plus de connaissances sur PHP, veuillez visiter le Site Web PHP chinois !

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer