angelor / routex
用于路由的精简PHP框架
This package is not auto-updated.
Last update: 2024-09-28 15:05:54 UTC
README
Routex是一个非常简单的ReSTful库,其创建目的是为了解决一个简单的问题:创建真正ReSTful接口的复杂性障碍太高。
安装
有两种安装方式:您可以完全使用Composer或下载GitHub仓库。
GitHub
- 下载仓库
- 解压缩到您需要的任何位置
- 设置您的psr-0标准自动加载器或包含以下文件
include('vendor/angelor/Routex/src/Common/MimeType.php'); include('vendor/angelor/Routex/src/Routex/Response/ResponseHeaderException.php'); include('vendor/angelor/Routex/src/Routex/Response/HttpResponseCode.php'); include('vendor/angelor/Routex/src/Routex/Response/HttpResponse.php'); include('vendor/angelor/Routex/src/Routex/Request/HttpRequest.php'); include('vendor/angelor/Routex/src/Routex/Route/RouteException.php'); include('vendor/angelor/Routex/src/Routex/Route/Path.php'); include('vendor/angelor/Routex/src/Routex/Routex.php'); include('vendor/angelor/Routex/src/Routex/Route.php');
Composer
require: "angelor/routex": "dev-master"
入门指南
首先,将 cp config.sample.php
从 /vendor/angelor/routex/
复制到您应用程序的根目录。
use \Routex\Route;
$app = new \Routex\Routex();
$route = new Route($app->config('http.verbs'));
$route->get('/', function($request, $response){
$response->text('Hello, World.');
});
$app->run($route);
use \Routex\Route;
这一行仅为了方便。
下一行简单获取我们应用程序的一个实例。核心应用程序仅处理配置选项和执行路由器。
然后我们创建一个 \Routex\Route 对象的实例,并传递一个我们支持的HTTP动词列表(作为一个数组)。在这种情况下,我正在使用config.php文件中定义的默认http动词。
下一部分定义了一个将响应文档根目录的 GET
请求的路由。如果发生这种情况,它将调用回调(作为第二个参数传递的匿名函数)。回调始终传递 \Routex\Response\HttpResponse
和 \Routex\Request\HttpRequest
对象。
在回调中,我们将响应类型设置为文本,并将响应体内容设置为 "Hello, World."。
最后我们调用 $app->run($route)
,它处理路由匹配。
路由
路由基本上是定义一个HTTPVerb(GET、POST、PUT、DELETE等)、一个URI端点(/、/users、/users/23)和一个当URI匹配时将被执行的回调。
直接匹配
直接匹配寻找URI与路由的精确匹配。在这种情况下,只有当URI是 /users 时,回调才会执行。
$route->get('/users', function($req, $res){
});
变量匹配
变量匹配允许我们在URI中设置命名参数。在这种情况下,只有当URI是 /users/anything 时,回调才会执行。在传递给回调的 HttpRequest
对象中,您可以通过 $req->param('id')
访问变量的值。
$route->get('/users/:id', function($req, $res){
});
通配符匹配
通配符参数与变量匹配相同,不同之处在于提供的值可以包含一个 /
。在这种情况下,只有当URI是 /users/what/are/you/doing
时,回调才会执行。$req->param(0)
将包含值 what/are/you/doing
。
$route->get('/users/*', function($req, $res){
});
需要注意的是,路由不是按照它们声明的顺序匹配的。相反,它们是按照复杂性递减的顺序匹配的。这意味着,如果您有一个定义了 /path/to/my/route
、/path/:to/my
和 /path/*
的路由,系统将首先尝试匹配 /path/to/my/route
,然后尝试匹配 /path/:to/my
,最后尝试匹配 /path/*
。
正则表达式匹配
正则表达式匹配允许我们微调我们的URI匹配。在这种情况下,只有当URI是 /users/12(其中12是任何数字)时,回调才会执行。然而,它不会匹配 /users/angelor。
$route->get('/users/(\d+)', function($req, $res){
});
回调
回调可以是任何可调用的类型。回调始终会接收到 三个 参数,但大多数情况下只需要前两个参数。按顺序传递它们是
HttpRequest
此部分包含有关实际请求的信息。头部信息、URI和动词(GET/POST/PUT等)都是该对象的一部分。根据需要,用户可能还会获得关于请求的更多信息。
HttpResponse
此部分包含有关对请求响应的信息。它设置了一些默认值(状态码和头部信息),但可以完全自定义,并允许您添加/修改头部信息,以及通过一些预创建的方法配置响应类型。
Routex
除了请求/响应,您还会收到应用的一个副本。这主要用于动态添加新路由或从回调内部访问配置变量。
视图和模型在哪里?
Routex不包含这些。不过请放心,我有很好的理由。这是因为Routex是一个ReSTful框架,90%的情况下,您使用ReSTful接口是因为您正在尝试构建某种类型的API,通常您不需要“视图”。模型也不包含在内,因为Routex旨在成为一个处理路由和请求的框架。您很可能已经知道如何构建您的应用程序,Routex旨在与您的应用程序一起工作,而不是告诉您如何构建。项目组织完全由您决定。
然而,Routex提供的却是易于设置响应头部。那是什么意思呢?简单来说。通过Routex中的HttpResponse
对象,您可以轻松地返回html、css、text、js、json或您能想到的几乎所有其他内容。虽然前五种是由Routex提供的,但如果您知道任何内容的MIME类型,您可以通过HttpResponse->writeHeader
方法轻松设置它。
这意味着您可以使用smarty或twig或任何您想要的工具,并通过HttpResponse->html()
将输出推送到,这将确保您的HTML带有所有适当的头部信息返回给浏览器。
功能
待办事项
- 单元测试
- 合适的入门文章
特别感谢
- Limonade-php
- Composer
- Packagist
- GitHub