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でシンプルな英数字のCAPTCHAを「Gregwar / Captcha」ライブラリで実装する方法
PHPでシンプルなランダム英数字のCAPTCHAを実装したい。「Gregwar ...
-
PHPで「php-qrcode-detector-decoder」ライブラリを使用してQRコードをデコードする方法
PHPでQRコードの画像をデコードし、値を変数等に格納したい。何とかならないか調 ...
-
PHPでランダムなカラーコードを生成する「RandomColor.php」ライブラリの利用方法
PHPでランダムなカラーコードを生成したい。自作するとなると「0~9」「a~f」 ...
-
PHPのバリエーションライブラリ「Valitron」の導入及び利用方法
フォーム等の入力内容チェックをPHP側で行う際、現状は素のPHPで書いているけど ...
-
PHPのHTTPクライアント用ライブラリ「Guzzle」の利用方法
以前に「Requests for PHP」を試したが、似たようなライブラリで「G ...