1. Go to this page and download the library: Download kode/middleware library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
kode / middleware example snippets
ode\Middleware\Pipe;
use Kode\Middleware\Routing\RouteResult;
use Kode\Middleware\Routing\RouteMiddleware;
use Kode\Middleware\TraceMiddleware;
use Kode\Middleware\ScopeMiddleware;
use Nyholm\Psr7\Response;
use Nyholm\Psr7\ServerRequest;
// 路由匹配器:返回 RouteResult
$matcher = new RouteMiddleware(function (ServerRequest $req): RouteResult {
if ($req->getUri()->getPath() === '/user/{id}') {
return RouteResult::matched(
handler: fn ($r) => new Response(200, [], 'user'),
params: ['id' => '42'],
name: 'user.show'
);
}
return RouteResult::notFound();
});
$response = Pipe::create()
->alias('auth', AuthMiddleware::class)
->beforeRoute(new TraceMiddleware(), new ScopeMiddleware()) // 全局前置
->router($matcher)
->afterRoute('auth') // 路由后:可读路由元数据
->fallback(fn ($req) => new Response(404, [], 'Not Found'))
->handle(new ServerRequest('GET', '/user/42'));
echo $response->getBody(); // "user"
use Kode\Middleware\Pipeline;
use Kode\Middleware\middleware;
$pipeline = (new Pipeline())
->add(new TraceMiddleware()) // 最外层
->add(middleware(fn ($req, $next) =>
$next->handle($req->withAttribute('t', microtime(true))))) // 闭包式中间件
->withDestination($controller); // 最内层终点
$response = $pipeline->handle($request);
use function Kode\Middleware\pipeline;
use function Kode\Middleware\pipe;
use function Kode\Middleware\middleware;
use function Kode\Middleware\handler;
use function Kode\Middleware\lazy;
use function Kode\Middleware\when;
use function Kode\Middleware\boundary;
use function Kode\Middleware\profiler;
use function Kode\Middleware\profile_of;
use function Kode\Middleware\route_of;
use function Kode\Middleware\runner_of;
use function Kode\Middleware\concurrently;
use function Kode\Middleware\capabilities;
use function Kode\Middleware\kernel;
$p = pipeline([
new TraceMiddleware(),
when(fn ($req) => $req->getUri()->getPath() === '/health' ? false : true, $auth),
]);
// 探测当前环境的并发能力
print_r(capabilities());
// ['sync' => true, 'fiber' => true, 'thread' => false, 'process' => false]
// 框架集成入口
$k = kernel(pipe()->beforeRoute(boundary(fn ($e) => new Response(500))));