• php中间件是什么


    php中间件(middleware)是一个闭包,而且返回一个闭包。

    中间件为过滤进入应用的HTTP请求提供了一套便利的机制,可以分为前置中间件和后置中间件。常用于验证用户是否经过认证,添加响应头(跨域),记录请求日志等。(推荐学习:PHP编程从入门到精通)

    php-43.png

    例子

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    <?php

    // 框架核心应用层

    $application = function($name) {

        echo "this is a {$name} application ";

    };

      

    // 前置校验中间件

    $auth = function($handler) {

        return function($name) use ($handler) {

            echo "{$name} need a auth middleware ";

            return $handler($name);

        };

    };

      

    // 前置过滤中间件

    $filter = function($handler) {

        return function($name) use ($handler) {

            echo "{$name} need a filter middleware ";

            return $handler($name);

        };

    };

      

    // 后置日志中间件

    $log = function($handler) {

        return function($name) use ($handler) {

            $return = $handler($name);

            echo "{$name} need a log middleware ";

            return $return;

        };

    };

      

    // 中间件栈

    $stack = [];

      

    // 打包

    function pack_middleware($handler, $stack)

    {

        foreach (array_reverse($stack) as $key => $middleware)

        {

            $handler = $middleware($handler);

        }

        return $handler;

    }

      

    // 注册中间件

    // 这里用的都是全局中间件,实际应用时还可以为指定路由注册局部中间件

    $stack['log'] = $log;

    $stack['filter'] = $filter;

    $stack['auth'] = $auth;

      

    $run = pack_middleware($application, $stack);

    $run('Laravle');

    输出:

    1

    2

    3

    4

    Laravle need a filter middleware

    Laravle need a auth middleware

    this is a Laravle application

    Laravle need a log middleware

    打包程序

    中间件的执行顺序是由打包函数(pack_middleware)决定,这里返回的闭包实际上相当于:

    1

    2

    $run = $log($filter($auth($application)));

    $run('Laravle');

    编写规范

    中间件要要满足一定的规范:总是返回一个闭包,闭包中总是传入相同的参数(由主要逻辑决定), 闭包总是返回句柄(handler)的执行结果;

    如果中间件的逻辑在返回句柄return $handler($name)前完成,就是前置中间件,否则为后置中间件。

    「大理石直角尺」大理石直角尺怎样精确测量钢件平整度?

  • 相关阅读:
    个人作业3——个人总结(Alpha阶段)
    单元测试
    个人作业2——英语学习APP案例分析
    结对作业-基于GUI的四则运算
    个人作业1:小学四则运算——基于控制台
    个人作业3--------个人总结(Alpha版本)
    结对作业 2
    个人作业 2
    结对作业 肖荣森(201421123079) 苏上鑫(201421123081)
    作业1---四则运算
  • 原文地址:https://www.cnblogs.com/furuihua/p/11477225.html
Copyright © 2020-2023  润新知