当前位置:首页 > PHP

php 实现中间件

2026-02-13 21:14:11PHP

PHP 实现中间件的步骤

使用闭包实现中间件

闭包是 PHP 中实现中间件的常见方式,通过传递请求和响应对象,可以在处理前后插入逻辑。

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

    $response = $next($request);

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

    return $response;
};

使用类实现中间件

通过类的方式可以更好地组织中间件逻辑,通常需要实现 handle 方法。

php 实现中间件

class ExampleMiddleware {
    public function handle($request, $next) {
        // 前置处理逻辑
        echo "Before handling request\n";

        $response = $next($request);

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

        return $response;
    }
}

中间件管道

中间件管道用于按顺序执行多个中间件,可以通过数组或队列管理中间件。

$middlewares = [
    function ($request, $next) {
        echo "Middleware 1\n";
        return $next($request);
    },
    function ($request, $next) {
        echo "Middleware 2\n";
        return $next($request);
    }
];

$handler = function ($request) {
    echo "Final handler\n";
    return "Response";
};

$pipeline = array_reduce(
    array_reverse($middlewares),
    function ($next, $middleware) {
        return function ($request) use ($next, $middleware) {
            return $middleware($request, $next);
        };
    },
    $handler
);

$response = $pipeline("Request");

框架中的中间件实现

在 Laravel 等框架中,中间件通常通过 Middleware 类实现,并注册到路由或全局中间件堆栈中。

php 实现中间件

// 定义中间件
php artisan make:middleware CheckAge

// 注册中间件
protected $routeMiddleware = [
    'age' => \App\Http\Middleware\CheckAge::class,
];

// 使用中间件
Route::get('profile', function () {
    //
})->middleware('age');

中间件的实际应用

中间件常用于身份验证、日志记录、数据过滤等场景。

class AuthMiddleware {
    public function handle($request, $next) {
        if (!auth()->check()) {
            return redirect('login');
        }
        return $next($request);
    }
}

测试中间件

通过模拟请求和响应对象,可以测试中间件的逻辑是否正确。

public function testMiddleware() {
    $request = new Request();
    $middleware = new ExampleMiddleware();
    $response = $middleware->handle($request, function ($req) {
        return new Response();
    });
    $this->assertInstanceOf(Response::class, $response);
}

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

相关文章

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your/…

php 实现评论

php 实现评论

实现 PHP 评论功能 数据库设计 创建数据库表存储评论数据,通常包含以下字段: id:评论唯一标识 user_id:用户ID content:评论内容 created_at:评论时间 parent…

php实现进度条

php实现进度条

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

php 实现排名

php 实现排名

PHP 实现排名的方法 在 PHP 中实现排名功能通常涉及对数据进行排序、计算排名以及输出结果。以下是几种常见的实现方式: 基本数组排序排名 $scores = [85, 92, 78, 95, 8…

php实现异步图片上传

php实现异步图片上传

异步图片上传的实现方法 在PHP中实现异步图片上传通常需要结合前端JavaScript和后端PHP代码。以下是几种常见的方法: 使用XMLHttpRequest或Fetch API 前端使用Java…