代码拉取完成,页面将自动刷新
The psr-15 HTTP Middleware implement.
ref PSR 15
composer require inhere/middleware
{
"require": {
"inhere/middleware": "dev-master"
}
}
git clone https://github.com/inhere/php-middleware.git // github
git clone https://gitee.com/inhere/php-middleware.git // git@osc
function func_middleware($request, RequestHandlerInterface $handler)
{
echo ">>> 0 before\n";
$res = $handler->handle($request);
echo "0 after >>>\n";
return $res;
}
function func_middleware1($request, RequestHandlerInterface $handler)
{
echo ">>> n before \n";
$res = $handler->handle($request);
echo "n after >>>\n";
return $res;
}
$chain = new MiddlewareStack([
'func_middleware',
function (ServerRequestInterface $request, RequestHandlerInterface $handler) {
echo ">>> 1 before \n";
$res = $handler->handle($request);
$res->getBody()->write(' + node 1');
echo "1 after >>> \n";
return $res;
},
function (ServerRequestInterface $request, RequestHandlerInterface $handler) {
echo ">>> 2 before \n";
$res = $handler->handle($request);
$res->getBody()->write(' + node 2');
echo "2 after >>> \n";
return $res;
},
function (ServerRequestInterface $request, RequestHandlerInterface $handler) {
echo ">>> 3 before \n";
$res = $handler->handle($request);
$res->getBody()->write(' + node 3');
echo "3 after >>> \n";
return $res;
},
function (ServerRequestInterface $request, RequestHandlerInterface $handler) {
// $res = HttpFactory::createResponse();
// $res->getBody()->write('content');
echo ">>> 4 before \n";
$res = $handler->handle($request);
$res->getBody()->write('node 4');
echo "4 after >>> \n";
return $res;
},
'func_middleware1'
]);
$request = HttpFactory::createServerRequest('GET', 'http://www.abc.com/home');
$chain->setCoreHandler(function (ServerRequestInterface $request) {
echo " (this is core)\n";
return HttpFactory::createResponse()->write('-CORE-');
});
$res = $chain($request);
echo PHP_EOL . 'response content: ', (string)$res->getBody() . PHP_EOL;
运行 php examples/test.php
$ php examples/test.php
>>> 0 before
>>> 1 before
>>> 2 before
>>> 3 before
>>> 4 before
>>> n before
(this is core)
n after >>>
4 after >>>
3 after >>>
2 after >>>
1 after >>>
0 after >>>
response content: node 4 + node 3 + node 2 + node 1
路由器,psr 7的http message 库
use Inhere\Http\HttpFactory;
use Inhere\Http\HttpUtil;
use Inhere\Middleware\MiddlewareStackAwareTrait;
use Inhere\Route\Base\RouterInterface;
use Inhere\Route\ORouter;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
$app = new class implements RequestHandlerInterface {
use MiddlewareStackAwareTrait;
/**
* @var ORouter
*/
private $router;
public function run(ServerRequestInterface $request)
{
$response = $this->callStack($request);
Http::respond($response);
}
/**
* 在这里处理请求返回响应对象
* @param ServerRequestInterface $request
* @return ResponseInterface
* @throws Throwable
*/
public function handleRequest(ServerRequestInterface $request): ResponseInterface
{
$method = $request->getMethod();
$uriPath = $request->getUri()->getPath();
$response = HttpFactory::createResponse();
try {
// $this->router->match($uriPath, $method);
$result = $this->router->dispatch(null, $uriPath, $method);
$response->getBody()->write($result);
} catch (Throwable $e) {
$response->getBody()->write($e->getTraceAsString());
}
return $response;
}
/**
* @return RouterInterface
*/
public function getRouter(): RouterInterface
{
return $this->router;
}
/**
* @param RouterInterface $router
*/
public function setRouter(RouterInterface $router)
{
$this->router = $router;
}
};
$router = new ORouter();
/**
* add routes
*/
$router->get('/', function () {
echo 'hello, world';
});
$router->get('/hello/{name}', function ($args) {
echo "hello, {$args['name']}";
});
/**
* add middleware
*/
$app->use(function (ServerRequestInterface $request, RequestHandlerInterface $handler) {
echo 'before handle0 > ';
$res = $handler->handle($request);
echo ' > after handle0';
return $res;
});
$app->use(function (ServerRequestInterface $request, RequestHandlerInterface $handler) {
echo 'before handle1 > ';
$res = $handler->handle($request);
echo ' > after handle1';
return $res;
});
/**
* run
*/
$req = HttpFactory::createServerRequestFromArray($_SERVER);
$app->setRouter($router);
$app->run($req);
$ php -S 127.0.0.1:8009 examples/app.php
visit: /hello/tom
response:
before handle0 > before handle1 > hello, tom > after handle1 > after handle0
MIT
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。