silawrenc / traffic
一个小巧、快速的基于正则表达式的路由器
0.0.1
2016-04-29 10:10 UTC
Requires
- php: >=7.0.0
Requires (Dev)
- phpunit/phpunit: ~5.3
This package is not auto-updated.
Last update: 2024-09-14 18:58:41 UTC
README
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
。