FastRouter 的明显映射

v0.1.1 2016-02-28 11:18 UTC

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 许可证