funnybunch / simple-http-router
用 PHP 编写的简单 HTTP 路由器。使用它来更好地管理 API 和服务器端 Web 路由。
Requires
- php: >=7.0
Requires (Dev)
- phpunit/phpunit: 6.*
This package is auto-updated.
Last update: 2024-09-24 15:39:00 UTC
README
2020 更新:PHP 将永远在我心中占有一席之地,但现在是 2020 年,我已经转向了其他项目。因此,这个存储库将不再维护或更新。这个存储库和代码将可供任何人使用、分支、修改,但应被视为“不再受支持”。
简单 HTTP 路由器
用 PHP 编写的简单 HTTP 请求路由器。Simple HTTP Router 允许你有一个单一的入口点来处理你的 Web 应用程序或 API,并根据 HTTP 的 REQUEST_METHOD 和 REQUEST_URI 明确调用不同的函数。
安装
最简单(Composer)
快速启动的方法是使用 Composer。
- 一旦安装了 Composer,请在根项目目录中使用以下命令初始化它
$ composer init
- 现在你已经准备好开始添加一些依赖项了。要安装 Simple HTTP Router
$ composer require funkybunch/simple-http-router
就这样!只需确保在代码顶部添加 autoload。
<?php require 'vendor/autoload.php';
复杂(手动)
下载存储库中的文件,然后导航到 src/ 目录。你需要包含或 require 这些文件来开始。
src/ |- HTTPErrors.php |- Request.php |- Router.php
由于它们使用 namespace 并且没有直接相互引用,因此你需要包含所有 3 个文件。
请记住,如果你手动安装,Composer 将无法自动更新此依赖项,因此强烈建议使用 Composer。
使用方法
一旦设置完成并安装了一切,创建你想要用作 Web 应用程序或 API 面向的文件。通常,这将是 Web 服务器活动目录根中的 index.php 文件。我们将将其称为你的 router 文件。
创建 Router()
要开始,你需要创建一个新的 Router() 对象
$router = new FunkyBunch\SimpleHTTPRouter\Router;
GET 请求
要为 GET 请求设置路由,请在 Router 类中使用 get() 方法。这个方法需要你设置的 $path 路由,以及一个匿名 function()。如果 $path 与 HTTP 请求匹配,则会调用此 function()。
你可以添加任意多的 get() 方法。
$router->get($path, function(){});
在这个阶段,你的 index.php 文件可能看起来像这样
<?php /** * HTTP Router for myWebApp * @author You! */ $router = new FunkyBunch\SimpleHTTPRouter\Router; $router->get('/', function() { // The following code will be executed when this `route` is called. echo "<h1>Hello world</h1>"; }); $router->get('/about', function() { // The following code will be executed when this `route` is called. echo "<h1>About Us</h1>"; });
POST 请求
要为 POST 请求设置路由,请在 Router 类中使用 post() 方法。与 get() 方法类似,此方法需要你设置的 $path 路由,以及一个匿名 function()。如果 $path 与 HTTP 请求匹配,则会调用此 function()。
$router->post($path, function(){});
在这个阶段,你的 index.php 文件可能看起来像这样
<?php /** * HTTP Router for myWebApp * @author You! */ $router = new FunkyBunch\SimpleHTTPRouter\Router; $router->get('/', function() { // The following code will be executed when this `route` is called. echo "<h1>Hello world</h1>"; }); $router->get('/about', function() { // The following code will be executed when this `route` is called. echo "<h1>About Us</h1>"; }); $router->post('/api/contact', function() { // The following code will be executed when this `route` is called. // Handle `POST` data });
getRequest() 方法
如果你正在构建 API,你很可能需要获取 HTTP 请求的 body。这可以通过使用 getRequest() 方法来完成。此方法返回针对 GET 和 POST 请求的请求对象。
$router->getRequest()
你可以使用 闭包 在 callback 函数内部(无论是 get() 还是 post() 方法)使用此方法。例如
$router->post($path, function() use(&$router) { $request = $router->getRequest(); // DO SOMETHING WITH $request }
这里的 & 很重要,因为它告诉 PHP 使用你已定义的全局变量。
在这个阶段,你的 index.php 文件可能看起来像这样
<?php /** * HTTP Router for myWebApp * @author You! */ $router = new FunkyBunch\SimpleHTTPRouter\Router; $router->get('/', function() { // The following code will be executed when this `route` is called. echo "<h1>Hello world</h1>"; }); $router->get('/about', function() { // The following code will be executed when this `route` is called. echo "<h1>About Us</h1>"; }); $router->post('/api/contact', function() use(&$router) { // The following code will be executed when this `route` is called. $request = $router->getRequest(); // DO SOMETHING WITH $request to read POST data });
注意:即使Apache或您喜欢的Web服务器正在服务/var/www/mywebapp/web/,它仍然可以引用/var/www/mywebapp/中的文件。这样,您可以保持其余的应用程序文件不在实时Web目录中。重要的是使用路由器的文件在实时目录中。
贡献与错误报告
我们始终欢迎贡献!对于您做出的任何更改或改进,请起草一个拉取请求并提交以供审查。
对于错误报告,请创建一个问题,我将进一步调查。
路线图
- 高级错误状态与处理
对于任何其他建议,请创建一个问题。