artoodetoo / junc
FastRouter 的明显映射
v0.1.1
2016-02-28 11:18 UTC
Requires
- php: >=5.4.0
- nikic/fast-route: 0.7.*
This package is auto-updated.
Last update: 2024-08-29 03:42:02 UTC
README
Junc 是定义路由的简洁方式。路由映射可以存储在任何格式中,包括 JSON/YAML/.ini,只需有一种将其转换为数组的方法。
这不是一个新的路由库,而是对出色的 FastRouter 的附加组件。
安装
使用 composer 安装
composer require artoodetoo/junc
用法
由于此包仅增强 FastRoute 的行为,请参阅 FastRoute 文档。您必须了解如何使用路由分发器。然后回到这里,看看路由定义中的差异。
Junc 将一系列 FastRoute 的 $r->addRoute() 替换为一个清晰的(静态)路线图。
示例 1. 基本用法
默认情况下,所有路由都是 GET 方法。
<?php require '/path/to/vendor/autoload.php'; $map = [ '/users' => 'get_all_users_handler', '/user/{id:\d+}' => 'get_user_handler', '/articles/{id:\d+}[/{title}]' => 'get_article_handler', ]; $dispatcher = FastRoute\simpleDispatcher(new R2\Junc\RouteMapper($map)); $httpMethod = $_SERVER['REQUEST_METHOD']; $uri = rawurldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)); $routeInfo = $dispatcher->dispatch($httpMethod, $uri); switch ($routeInfo[0]) { case FastRoute\Dispatcher::NOT_FOUND: header('HTTP/1.0 404 Not Found'); exit; case FastRoute\Dispatcher::METHOD_NOT_ALLOWED: header("HTTP/1.0 405 Method Not Allowed"); exit; case FastRoute\Dispatcher::FOUND: $handler = $routeInfo[1]['do']; $handler($routeInfo[2]); break; }
注意:
$routeInfo[1] 不是一个字符串。它是一个包含至少一个必需键 'do' 的数组。
$routeInfo[2] 是路由变量('id' 等等)的关联数组。
示例 2. 深层次结构带有额外属性(这些属性继承到所有子路由中)
$map = [ '/' => 'index', '/forum/{id:\d+}' => 'view_forums', '/admin' => [ 'allow' => 'ROLE_ADMIN', '/' => 'admin_dashboard', '/updates' => 'admin_updates', '/user' => [ '/' => 'admin_user_list', '/{id:\d+}' => 'admin_user_view', '/new' => 'admin_user_new', ], ], ];
Junc 足够聪明,能够区分路由部分和属性。所有路由部分都以斜杠 "/" 字符开头。
示例 3a. 显式方法
您可以定义特定路由的方法。
$map = [ '/' => 'index', '/post/{id:\d+}' => [ ['on' => 'GET', 'do' => 'read_post'], ['on' => 'POST', 'do' => 'write_post'], ], ];
示例 3b. 隐式方法
或者,您可以为一系列路由设置公共方法。
$map = [ '/' => 'index', [ 'on' => 'GET', '/forum/{id:\d+}' => 'view_forum', '/topic/{id:\d+}' => 'view_topic', ], [ 'on' => 'POST', '/new', [ '/forum' => 'new_forum', '/topic' => 'new_topic', '/comment' => 'new_comment', ] ], ];
示例 4. 缓存
$dispatcher = FastRoute\cachedDispatcher( new R2\Junc\RouteMapper($map), [ 'cacheFile' => __DIR__ . '/route.cache', /* required */ 'cacheDisabled' => IS_DEBUG_ENABLED, /* optional, enabled by default */ ] );
许可证
Junc 是开源软件,许可协议为 MIT 许可证