borobudur / routing
此包已被废弃且不再维护。未建议替代包。
Borobudur 路由组件
dev-master / 0.1.x-dev
2015-09-21 07:00 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2017-10-23 11:55:44 UTC
README
Borobudur\Routing
是一个高性能且轻量级的 PHP 5.4+ 路由组件
- 支持所有 HTTP 方法
- 验证特定的 HTTP 方法
- 命名路由参数
- 默认值路由参数
- 正则表达式参数要求
- 带前缀的嵌套路由集合
- 路由自处理或自定义 Router 处理器
安装
- 获取 Composer
- 使用
composer require borobudur/routing
安装 Borobudur\Routing - 在主 PHP 文件中添加 composer 自动加载:
require __DIR__.'/vendor/autoload.php';
示例
示例 1 - 监听 $_SERVER['SCRIPT_NAME'] 供 PHP 虚拟服务器使用
<?php require_once __DIR__.'/vendor/autoload.php'; use Borobudur\Routing\RouteCollection; use Borobudur\Routing\Route; use Borobudur\Routing\Router; use Borobudur\Routing\RequestContext; use Borobudur\Routing\RouteFactory; // Add collection $collection = new RouteCollection(); $collection->add('default', RouteFactory::createHttpGet('/', function() { return 'hello world!!'; })); $collection->add('detail', new Route( '/detail/{id}', array('id' => 1), array('id' => '\d+'), array(Route::HTTP_METHOD_GET), function(RequestContext $request) { return sprintf('Currently view detail with id %s', $request->getParameter('id')); } )); $router = new Router($collection); // Router closure handler $router->setClosureHandler(function(Route $route = null, RequestContext $request) { if (null === $route) { echo '404 Not Found'; } else { $caller = Closure::bind($route->getHandler(), null); echo $caller($request); } }); // Listen request (only work for php virtual server) use $_SERVER['PATH_INFO'] for cgi $router->listen(new RequestContext($_SERVER['SCRIPT_NAME'], $_SERVER['REQUEST_METHOD']));
示例 2 - 为 cli 创建模拟请求
$collection = new RouteCollection(); $collection->add('dummy', RouteFactory::createHttpGet('/dummy', function() { // Route self handling without route handler var_dump('dummy request from php cli!!'); })); $router = new Router($collection); $router->listen(RequestContextFactory::createHttpGet('/dummy'));