PHPでルーティング用ライブラリ「AltoRouter」の利用方法
PHPフレームワークのCodeIgniterを勉強していた際にルーティング機能が便利だなと思った。これをフレームワーク無しの状態でも使えないかと思って調べたところ「AltoRouter」がシンプルで良さそう。「AltoRouter」を使用してhello worldページの表示とパラメータ付きのルーティング方法をメモ。
目次
AltoRouter
公式サイト
https://github.com/dannyvankooten/AltoRouter
リファレンス
https://dannyvankooten.github.io/AltoRouter/
特長
- composer無しでも導入可
- ファイル1枚で動作する
- インストール要件はPHP5.3以上(8.3系で動作確認済み)
- そこそこ更新が活発(2024/03時点で最終更新が約半年前)
- 日本語での情報が少なめ
インストール
composerを利用する場合
サーバにSSH接続し以下コマンドでインストールする。
composer require altorouter/altorouter
composerを利用しない場合
以下からzipファイルをダウンロードし、展開した上でAltoRouter.phpを適当なディレクトリにアップロードする。
https://github.com/dannyvankooten/AltoRouter/zipball/master
尚、今回はこちらの方法を取った。
ディレクトリ構成
root/ ├lib/ │└AltoRouter.php(ライブラリ) ├public/ │├hello.php │├item.php │└user.php ├.htaccess └index.php
ソースコード
.htaccess
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . index.php [L]
index.php
<?php include './lib/AltoRouter.php'; $router = new AltoRouter(); //ベースパス指定(ドキュメントルート以外の場合に指定) $router->setBasePath('/aaa/bbb'); //hello worldページ(TOPページ) $router->map( 'GET', '/', function() { include __DIR__ . '/public/hello.php'; }); //ユーザーページ $router->map( 'GET', '/user/[i:user_id]/', function( $user_id ) { require __DIR__ . '/public/user.php'; }); //商品ページ $router->map( 'GET', '/item/[*:item_code]/', function( $item_code ) { require __DIR__ . '/public/item.php'; }); $match = $router->match(); if( $match && is_callable( $match['target'] ) ) { call_user_func_array( $match['target'], $match['params'] ); }else{ //エラー処理(404リダイレクト) echo 'エラーが発生しました。'; }
/public/hello.php
<?php echo 'hello world';
/public/item.php
<?php if( isset($item_code) ){ echo 'item_codeは' . $item_code . 'です。'; }else{ echo 'item_codeが指定されていません。'; }
/public/user.php
<?php if( isset($user_id) ){ echo 'idは' . $user_id . 'です。'; }else{ echo 'idが指定されていません。'; }
解説等
ベースパス指定
ドキュメントルート以外で使用したい場合に以下ベースパス指定をする必要がある(指定しないと動かない)。
$router->setBasePath('/aaa/bbb');
mapの第1引数
以下から選択できる模様。
- GET
- POST
- PATCH
- PUT
- DELETE
HTTPメソッドについてはこちらのページが分かりやすい。
mapの第2引数
アクセス時のディレクトリ名を指定する。「https://test.com/設置ディレクトリ/home」の場合は「/home」を指定する。
また、パラメータを付与したい場合[一致タイプ:変数名]で指定する。一致タイプについては以下から選択できる模様。
- 'i' => '[0-9]++'
- 'a' => '[0-9A-Za-z]++'
- 'h' => '[0-9A-Fa-f]++'
- '*' => '.+?'
- '**' => '.++'
- '' => '[^/\.]++'
半角数値のみの「i」、半角英数のみの「a」、何でもありの「*」あたりがよく使いそう。
所感
composer無しでも導入可&ファイル1枚で動作という好きなパターンなので今後使っていきたい。
尚、もっと高機能なものを使いたい場合はFastRouteが良いらしい。
関連記事
-
PHPのエラーメッセージ及びvar_dumpを見やすく表示するライブラリ「Tracy」の利用方法
ここのところPHPでの開発時にvar_dumpをツールバー表示する「Kint」及 ...
-
PHPでCSVを簡単に取り扱える「LeagueCSV(thephpleague / csv)」の利用方法
PHPでCSVファイルの書き込みや読み込みを行う際、バニラPHPで対応していたが ...
-
PHPでJavaScriptを圧縮するライブラリ「JShrink」の利用方法
サイト内でJavaScriptを用いる場合、外部のライブラリやプラグインだと圧縮 ...
-
PHPで配列を確認する際にvar_dumpよりも見やすくなるdBug.phpの利用方法
PHPで配列を確認する際、大抵var_dumpで出力させているがこれが見づらい。 ...
-
PHPで住所や名前のテキストをランダム生成するライブラリFakerPHPの使い方
PHPでランダムなデータを生成したい際に値段や点数等の数値やパスワード等のランダ ...