angelor/routex

用于路由的精简PHP框架

dev-master 2013-02-26 19:34 UTC

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带有所有适当的头部信息返回给浏览器。

功能

  • 复杂路由(带有变量和正则表达式) - 定义/api/:version/action/:format为有效的URL
  • 路由注入 - 加载更多路由并在运行时解析它们的能力。
  • 遵守PSR-0PSR-1

待办事项

  • 单元测试
  • 合适的入门文章

特别感谢