taro/php-router

v1.0.1 2022-11-05 03:14 UTC

This package is auto-updated.

Last update: 2024-09-05 07:16:07 UTC


README

这是一个基于php的URL路由类,它根据客户端从Web应用程序发送的请求返回目的地Controller等值。

特点

  • 简洁易懂的路由定义方法
  • 将路由定义汇总到路由文件中
  • 通过缓存功能,可以将路由信息注册到缓存中,从而提高下一次执行的速度
  • 内部通过路由信息生成树结构,实现执行效率的提升

执行速度

根据执行环境的不同,在CPU 4核心 3.50Ghz RAM 8GB的我的环境中,结果如下。

测量5次执行的平均值

使用方法

路由设置

创建路由设置用文件(参考routes/routes.php),在执行时指定文件路径到loadRoutes方法。在此文件中,以下形式的路由定义文以$router实例的方法形式进行描述。请注意,$router实例在文件读取时由Router类传递。

使用与请求方法同名的方法定义每个路由

// メソッド名('URLのパス', '登録したい値', [オプション配列])
$router->post('/products', 'Products@store');

// パラメータは :パラメータ名 で指定
$router->put('/products/:id', 'Products@update');
$router->delete('/products/:id', 'Products@delete');

// 第3引数のオプションにmiddlewareを指定
$router->get('/products', 'Products@index', ['middleware'=>['auth','api']]);

将URL最后的参数设置为可选

// パラメータ名の末尾に ? を付けると、オプションになる
$router->get('/users/:id?', 'routeWithOptionParam');

使用controller方法将CRUD的7个方法的路由批量注册

$router->controller('/tasks', 'TasksController');
// 以下のルートを登録
// GET     /tasks              TasksController@index
// GET     /tasks/:tasks       TasksController@show
// GET     /tasks/create       TasksController@create
// GET     /tasks/:tasks/edit  TasksController@edit
// POST    /tasks              TasksController@store
// PUT     /tasks/:tasks       TasksController@update
// DELETE  /tasks/:tasks       TasksController@delete    

使用数组批量注册路由

$router->setRoutes([
    ["GET","/" , 'index.html'],
    ["GET","/etc/php5/abc/:role" , "role.php"],
    ["GET","/etc/php5/cli/man/readme" , "man@readme.ini", ['middleware'=>'auth']],
]);

使用group方法应用公共处理

group参数

  • prefix:指定内部路由定义中通用的URL
  • middleware:应用于路由的中间件名称
// group([グループパラメータ], function($router){  ここにルート定義文を記述   })
$router->group(['prefix'=>'order/:order_no','middleware'=>'admin'], function ($router) {
    $router->get('/shipping', 'Shipping@index'); // url => order/:order_no/shipping

    // group は入れ子にできる
    $router->group(['prefix'=>'payment'], function ($router) {
      $router->delete('/credit/:code', 'Credit@delete'); // url => order/:order_no/payment/credit/:code
    });
});

路由执行

  1. 创建Router类的实例。
  2. 传递配置文件路径,读取路由设置文件。
  3. 将URL和请求方法传递给类的match方法。
  4. 结果可以以数组的形式获取。
$router = new Router();
$router->loadRoutes([routes.phpへのパス]);
// $router->showTrees(); 作成したルーティング木を表示

$url = '/products';
$result = $router->match($url, 'GET');

print_r($result);

路由结果

match方法返回以下结构的返回值。

[
    'callback'  => '登録されている値',
    'url' => $url,
    'params' => [
        'id' => 111, // ルートパラメータがある時、パラメーター名をキーとした配列を返す
    ]
    'options' => [
        'middleware'=>['web']
    ]
]

路由表显示

通过showTable方法显示当前注册的路由表。

$router->showTable();

// ルーティング表表示
|Method |Url                                           |Action                    |Options
|DELETE |/tasks/:tasks                                 |TaskController@delete     |middleware=web
|   GET |/tasks/:tasks/edit                            |TaskController@edit       |middleware=web
|   GET |/tasks/:tasks                                 |TaskController@show       |middleware=web
|   GET |/tasks/create                                 |TaskController@create     |middleware=web
|   GET |/tasks                                        |TaskController@index      |middleware=web
|  POST |/tasks                                        |TaskController@store      |middleware=web
|   PUT |/tasks/:tasks                                 |TaskController@update     |middleware=web

许可协议 (License)

Php Router是在MIT license下发布的。

Php Router是开源软件,根据MIT license许可。