fatcode / http-server
快速、可靠的 psr-15、psr-7 兼容 PHP HTTP 服务器。
Requires
- php: >=7.2.0
- ext-json: *
- ext-simplexml: *
- ext-zlib: *
- fatcode/enum: >=1.1
- nikic/fast-route: >=1.3
- psr/http-message: >=1.0
- psr/http-server-middleware: >=1.0
- psr/simple-cache: >=1.0
- zendframework/zend-diactoros: >=2.1
Requires (Dev)
- mockery/mockery: >=1.2
- phpunit/phpunit: >=8.0
- squizlabs/php_codesniffer: >=3.0
- swoole/ide-helper: @dev
This package is auto-updated.
Last update: 2024-09-15 02:35:46 UTC
README
需求
>= PHP 7.2
swoole 扩展
zlib 扩展
安装
composer install fatcode/http-server
快速入门
<?php declare(strict_types=1); use FatCode\HttpServer\HttpServer; use FatCode\HttpServer\Server\Router; use FatCode\HttpServer\Response; // Instantiates router for registering resources: $router = new Router(); $router->get('/hello', function () { return new Response('Hello You!'); }); // Run server at localhost:80 $server = new HttpServer(); $server->use($router); $server->start();
上述示例创建了一个使用已注册资源的路由器的服务器。服务器将在 localhost
的 8080
端口上监听。
请注意:该软件包支持 PSR-7,这意味着所有注册的处理程序都应期望以
ServerRequestInterface
作为输入,并以ResponseInterface
作为结果。
以守护进程运行服务器
HTTP 服务器提供了一个灵活的配置类,根据您的设置,服务器可以被作为守护进程运行、在特定端口上运行、监听特定数量的传入连接等。
更多选项可以在 类本身 中找到。
<?php declare(strict_types=1); use FatCode\HttpServer\HttpServer; use FatCode\HttpServer\Server\HttpServerSettings; // Setting pid file will make server run as a daemon. $settings = new HttpServerSettings('0.0.0.0', 8080); $settings->setPidFile(sys_get_temp_dir() . '/my_pid.pid'); // Note this server will always respond with 404 response, as there is // no router passed that can handle the request. $server = new HttpServer(); $server->start();
中间件和 PSR-15 支持
注册和使用 PSR-15 兼容的中间件非常简单,只需将给定中间件或闭包的实例传递给 HttpServer::use
方法,按正确的顺序即可。实际上,FatCode\HttpServer\Server\Router
类本身就是 PSR-15 中间件。
<?php declare(strict_types=1); use FatCode\HttpServer\HttpServer; use FatCode\HttpServer\Response; use Psr\Http\Message\ServerRequestInterface; // Simple pong server. $server = new HttpServer(); $server->use(function (ServerRequestInterface $request) : Response { if ($request->getUri()->getPath() === '/ping') { return new Response('Pong!'); } return new Response('Please call /ping uri.'); }); $server->start();
请求、响应和 PSR-7
HTTP 软件包提供了一个基于 zendframework/zend-diactoros
软件包的便捷 PSR-7 实现。简而言之,FatCode\HttpServer\ServerRequest
和 FatCode\HttpServer\Response
对象利用了 zend-diactoros
的异常和接口,并增加了一些功能。在处理这些对象时,请记住这一点。
创建新的响应对象
<?php declare(strict_types=1); use FatCode\HttpServer\Response; use FatCode\HttpServer\HttpStatusCode; // Creates new response with status code 200. $response = new Response("Hello world!", HttpStatusCode::OK());
为了您的方便,软件包声明了 HttpStatusCode
枚举,它有助于生成有效的 HTTP 响应。更多状态码可以在 类本身 中找到。
处理请求对象
读取路由参数
在声明参数化路由时,您可以通过调用 FatCode\HttpServer\ServerRequest::getAttribute
方法来访问和检索值。考虑以下示例
<?php declare(strict_types=1); use FatCode\HttpServer\HttpServer; use Psr\Http\Message\ServerRequestInterface; use FatCode\HttpServer\Response; use FatCode\HttpServer\Server\Router; // Initialize router $router = new Router(); // Register parametrized route $router->get('/hello/{name}', function (ServerRequestInterface $request) : Response { // Return response return new Response("Hello, your name is {$request->getAttribute('name')}"); }); // Setup http server $server = new HttpServer(); $server->use($router); $server->start();
更多示例,您可以访问 示例目录。