silawrenc/traffic

一个小巧、快速的基于正则表达式的路由器

0.0.1 2016-04-29 10:10 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:58:41 UTC


README

High five

Master branch build status PHP ~7.0 Published version ISC Licensed

Traffic 是一个轻量级但快速灵活的 PHP 网络路由组件。路由由正则表达式定义,并分发给一系列可调用的处理器。

安装 Traffic 最简单的方法是通过 Composer

{
    "require": {
        "silawrenc/traffic": "*"
    }
}

API

添加路由

路由可以按照以下格式 ($method, $pattern, ...$handlers) 添加到路由器中。

$router = new Traffic;
$router->add('GET', '/foo/bar', function() {
    // do stuff
});

还提供了便捷方法用于处理 GET 和 POST 请求。

$router->get('/foo/bar', function () {
    // show stuff
});

$router->post('/foo/bar', function () {
    // save stuff
});

动态路由

您可以同时指定方法和路径为正则表达式。捕获项作为位置参数传递给处理器。

$router->add('(GET|POST)', '/user/([a-z]+)', function ($method, $username) {
    // as you were
});

还支持更简单的语法:您可以使用 /foo/{bar} 来捕获 URL(或方法)的一部分。默认情况下,匹配除 / 以外的任何字符。如果您想指定一个模式,可以在冒号后包含它,例如 /foo/{bar:\d{4}}。方法支持通配符 *,它可以匹配和捕获任何方法名。

$router->add('*', '/foo/{bar}/{baz:[A-Z]+}', function ($method, $bar, $baz) {
    // important stuff
});

$router->add('(?:PATCH|PUT)', '/foo/{bar}', function ($bar) {
    // using a non-capturing regex group for the method
});

了解支持格式的最佳方法是查看 通过失败 测试用例。任何有效的正则表达式都是方法或路径的有效语法。

处理器

您可以指定任意数量的处理器,并且它们将按照指定的顺序被调用。如果任何处理器返回严格为假,则它后面的处理器都不会被调用。

// return false from auth(), and render won't be invoked
$router->get('hello/world', auth(), render('landing'));

$router->get('hello/world', routeSpecificMiddleWare(), render('landing'), otherMiddleWare());

路由

添加完所有路由后,您可以使用路由器进行匹配

$router->route($method, $path);

这将匹配 $method$path 与您添加的所有路由,并调用第一个匹配的路由处理器。因此,请确保从最具体到最不具体地指定您的路由。route 方法的返回值如果找到匹配项为 true,如果没有找到匹配项为 false