当前位置:首页 > PHP

php 实现中间件

2026-04-03 04:51:42PHP

PHP 实现中间件的方法

使用闭包实现中间件

闭包(匿名函数)是PHP中实现中间件的简单方式。通过将请求和响应对象传递给闭包,可以在处理请求前后执行特定逻辑。

$middleware = function ($request, $next) {
    // 前置处理逻辑
    echo "Before handling request\n";

    $response = $next($request);

    // 后置处理逻辑
    echo "After handling request\n";

    return $response;
};

使用类实现中间件

通过定义一个中间件类,可以实现更结构化的中间件逻辑。通常需要实现一个handle方法。

class AuthMiddleware {
    public function handle($request, $next) {
        if (!isset($_SESSION['user'])) {
            header('Location: /login');
            exit;
        }
        return $next($request);
    }
}

中间件栈的实现

通过将多个中间件按顺序组合,可以形成一个中间件栈。每个中间件调用下一个中间件,直到最终处理请求。

$middlewareStack = [
    new AuthMiddleware(),
    new LoggingMiddleware(),
    new RequestHandler()
];

$handler = array_reduce(
    array_reverse($middlewareStack),
    function ($next, $middleware) {
        return function ($request) use ($next, $middleware) {
            return $middleware->handle($request, $next);
        };
    },
    function ($request) {
        return new Response('Hello World');
    }
);

$response = $handler(new Request());

PSR-15 中间件标准

遵循PSR-15标准可以实现更通用的中间件接口。定义一个中间件类需要实现Psr\Http\Server\MiddlewareInterface

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;

class ExampleMiddleware implements MiddlewareInterface {
    public function process(
        ServerRequestInterface $request,
        RequestHandlerInterface $handler
    ): ResponseInterface {
        // 前置处理
        $response = $handler->handle($request);
        // 后置处理
        return $response;
    }
}

框架中的中间件实现

许多PHP框架(如Laravel、Symfony)内置了中间件支持。以Laravel为例,可以通过artisan命令生成中间件。

php artisan make:middleware CheckAge

生成的中间件类需要实现handle方法:

namespace App\Http\Middleware;

use Closure;

class CheckAge {
    public function handle($request, Closure $next) {
        if ($request->age <= 18) {
            return redirect('home');
        }
        return $next($request);
    }
}

中间件的注册与使用

在框架中注册中间件通常通过配置文件或路由定义完成。Laravel中可以在Kernel.php中注册全局中间件或路由中间件。

php 实现中间件

protected $middleware = [
    \App\Http\Middleware\CheckAge::class,
];

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
];

标签: 中间件php
分享给朋友:

相关文章

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php实现多态

php实现多态

多态的概念 多态是面向对象编程的三大特性之一,指同一个方法在不同类中有不同实现方式。PHP通过继承和接口实现多态。 通过继承实现多态 父类定义方法,子类重写该方法实现不同行为: class…

php实现进度条

php实现进度条

PHP 实现进度条的方法 使用 HTML 和 CSS 结合 PHP 实现进度条 在 PHP 中,进度条通常通过 HTML 和 CSS 实现,PHP 负责计算进度并更新前端显示。 <di…