{"id":22007183,"url":"https://github.com/tekku-taro/php-router","last_synced_at":"2025-03-23T07:12:33.665Z","repository":{"id":144672363,"uuid":"295160563","full_name":"tekku-taro/php-router","owner":"tekku-taro","description":"php製ルーティング用クラス","archived":false,"fork":false,"pushed_at":"2022-11-05T03:15:22.000Z","size":388,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-01-28T13:49:41.624Z","etag":null,"topics":["library","php","router"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tekku-taro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-09-13T13:47:09.000Z","updated_at":"2022-11-05T02:51:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"ba956f54-732e-4151-be52-814034d73431","html_url":"https://github.com/tekku-taro/php-router","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tekku-taro%2Fphp-router","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tekku-taro%2Fphp-router/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tekku-taro%2Fphp-router/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tekku-taro%2Fphp-router/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tekku-taro","download_url":"https://codeload.github.com/tekku-taro/php-router/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245066676,"owners_count":20555427,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["library","php","router"],"created_at":"2024-11-30T01:18:13.549Z","updated_at":"2025-03-23T07:12:33.658Z","avatar_url":"https://github.com/tekku-taro.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Php Router\n\nWebアプリケーションでクライアントから送られたリクエストを元に送信先のControllerなどの値を返す、php製URLルーティング用のクラス。\n\n## 特徴\n\n- 簡潔で分かりやすいルーティング定義方法\n- ルーティングファイルにまとめて記述\n- キャッシュ機能により、ルーティング情報の登録をキャッシュでき、次回以降の実行速度を向上できる\n- 内部ではルーティング情報から木構造を生成し、実行処理の向上を実現\n\n## 実行速度\n\n実行環境によりますが、自分の環境(CPU４コア 3.50Ghz RAM 8GB)では以下のようになりました。\n\n5回実行した平均値を測定\n\n| 登録ルート数 | ルーティング作成時間( ms ) | 処理時間( ms ) |\n| ------------ | -------------------------- | -------------- |\n| 30           | 0.920                      | 0.0359         |\n| 300          | 8.48                       | 0.0398         |\n| 2500         | 56.6                       | 0.0432         |\n\n\n\n## 使い方\n\n## ルーティングの設定\n\nルーティング設定用ファイルを作成して（routes/routes.phpを参照）、実行時に `loadRoutes` メソッドにファイルへのパスを指定します。このファイルに以下のようなルート定義文を、`$router`インスタンスのメソッドの形で記述します。なお、`$router`インスタンスはファイル読み込み時にRouterクラスから渡されます。\n\n### リクエストメソッドと同名メソッドで各ルートを定義\n\n```php\n// メソッド名('URLのパス', '登録したい値', [オプション配列])\n$router-\u003epost('/products', 'Products@store');\n\n// パラメータは :パラメータ名 で指定\n$router-\u003eput('/products/:id', 'Products@update');\n$router-\u003edelete('/products/:id', 'Products@delete');\n\n// 第３引数のオプションにmiddlewareを指定\n$router-\u003eget('/products', 'Products@index', ['middleware'=\u003e['auth','api']]);\n```\n\n### URL最後のパラメータをオプションに設定\n\n```php\n// パラメータ名の末尾に ? を付けると、オプションになる\n$router-\u003eget('/users/:id?', 'routeWithOptionParam');\n```\n\n### controllerメソッドでCRUDの７つのメソッドへのルートを一括登録\n\n```php\n$router-\u003econtroller('/tasks', 'TasksController');\n// 以下のルートを登録\n// GET     /tasks              TasksController@index\n// GET     /tasks/:tasks       TasksController@show\n// GET     /tasks/create       TasksController@create\n// GET     /tasks/:tasks/edit  TasksController@edit\n// POST    /tasks              TasksController@store\n// PUT     /tasks/:tasks       TasksController@update\n// DELETE  /tasks/:tasks       TasksController@delete    \n```\n\n### 配列でルートを一括登録\n\n```php\n$router-\u003esetRoutes([\n    [\"GET\",\"/\" , 'index.html'],\n    [\"GET\",\"/etc/php5/abc/:role\" , \"role.php\"],\n    [\"GET\",\"/etc/php5/cli/man/readme\" , \"man@readme.ini\", ['middleware'=\u003e'auth']],\n]);\n```\n\n### groupメソッドで共通処理を適用\n\n#### groupパラメータ\n\n- `prefix`：　内部のルート定義に共通するURLを指定する\n- `middleware`：　ルートに適用するミドルウェア名\n\n```php\n// group([グループパラメータ], function($router){  ここにルート定義文を記述   })\n$router-\u003egroup(['prefix'=\u003e'order/:order_no','middleware'=\u003e'admin'], function ($router) {\n    $router-\u003eget('/shipping', 'Shipping@index'); // url =\u003e order/:order_no/shipping\n\n    // group は入れ子にできる\n    $router-\u003egroup(['prefix'=\u003e'payment'], function ($router) {\n      $router-\u003edelete('/credit/:code', 'Credit@delete'); // url =\u003e order/:order_no/payment/credit/:code\n    });\n});\n```\n\n## ルーティングの実行\n\n1. Routerクラスのインスタンスを作成します。\n2. **設定ファイルへのパス**を渡して、ルート設定ファイルを読み込みます。\n3. クラスの`match`メソッドにURLとリクエストメソッドを渡します。\n4. 結果が配列で取得できます。\n\n```php\n$router = new Router();\n$router-\u003eloadRoutes([routes.phpへのパス]);\n// $router-\u003eshowTrees(); 作成したルーティング木を表示\n\n$url = '/products';\n$result = $router-\u003ematch($url, 'GET');\n\nprint_r($result);\n```\n\n## ルーティング結果\n\n`match`メソッドは以下の構造の戻り値を返します。\n\n```php\n[\n    'callback'  =\u003e '登録されている値',\n    'url' =\u003e $url,\n    'params' =\u003e [\n        'id' =\u003e 111, // ルートパラメータがある時、パラメーター名をキーとした配列を返す\n    ]\n    'options' =\u003e [\n        'middleware'=\u003e['web']\n    ]\n]\n```\n\n## ルーティング表の表示\n\n`showTable`メソッドによって、現在登録されているルーティング表を表示します。\n\n```php\n$router-\u003eshowTable();\n\n// ルーティング表表示\n|Method |Url                                           |Action                    |Options\n|DELETE |/tasks/:tasks                                 |TaskController@delete     |middleware=web\n|   GET |/tasks/:tasks/edit                            |TaskController@edit       |middleware=web\n|   GET |/tasks/:tasks                                 |TaskController@show       |middleware=web\n|   GET |/tasks/create                                 |TaskController@create     |middleware=web\n|   GET |/tasks                                        |TaskController@index      |middleware=web\n|  POST |/tasks                                        |TaskController@store      |middleware=web\n|   PUT |/tasks/:tasks                                 |TaskController@update     |middleware=web\n```\n\n\n\n## ライセンス (License)\n\n**Php Router**は[MIT license](https://opensource.org/licenses/MIT)のもとで公開されています。\n\n**Php Router** is open-source software licensed under the [MIT license](https://opensource.org/licenses/MIT).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftekku-taro%2Fphp-router","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftekku-taro%2Fphp-router","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftekku-taro%2Fphp-router/lists"}