funnybunch/simple-http-router

用 PHP 编写的简单 HTTP 路由器。使用它来更好地管理 API 和服务器端 Web 路由。

v1.1.0 2019-02-11 04:59 UTC

This package is auto-updated.

Last update: 2024-09-24 15:39:00 UTC


README

2020 更新:PHP 将永远在我心中占有一席之地,但现在是 2020 年,我已经转向了其他项目。因此,这个存储库将不再维护或更新。这个存储库和代码将可供任何人使用、分支、修改,但应被视为“不再受支持”。

简单 HTTP 路由器

Build Status

用 PHP 编写的简单 HTTP 请求路由器。Simple HTTP Router 允许你有一个单一的入口点来处理你的 Web 应用程序或 API,并根据 HTTP 的 REQUEST_METHODREQUEST_URI 明确调用不同的函数。

安装

最简单(Composer)

快速启动的方法是使用 Composer

  1. 一旦安装了 Composer,请在根项目目录中使用以下命令初始化它
    $ composer init
  2. 现在你已经准备好开始添加一些依赖项了。要安装 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() 方法来完成。此方法返回针对 GETPOST 请求的请求对象。

$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目录中。重要的是使用路由器的文件在实时目录中。

贡献与错误报告

我们始终欢迎贡献!对于您做出的任何更改或改进,请起草一个拉取请求并提交以供审查。

对于错误报告,请创建一个问题,我将进一步调查。

路线图

  • 高级错误状态与处理

对于任何其他建议,请创建一个问题

许可证

版权(c)2019 Mark Adkins和其他贡献者。本项目是开源的,并使用MIT许可证许可。