CodeIgniterのルーティング完全ガイド!初心者でもわかるコントローラとURLの対応付け
生徒
「CodeIgniterでURLとコントローラを繋げる方法が知りたいんですが、どうすればいいですか?」
先生
「CodeIgniterでは、ルーティングという仕組みを使って、URLとコントローラを簡単に対応付けることができますよ。」
生徒
「ルーティングって何ですか?難しそうですね...」
先生
「いえいえ、とても簡単です。例えるなら、郵便配達のようなものです。住所(URL)を見て、正しい家(コントローラ)に届けるイメージです。それでは基本から見ていきましょう!」
1. CodeIgniterのルーティングとは?
CodeIgniterのルーティングとは、ウェブサイトのURLと、実際に処理を行うコントローラを結びつける仕組みのことです。簡単に言えば、訪問者がブラウザで特定のURLを入力したときに、どのプログラムを実行するかを決めるルールのことです。
例えば、あなたがレストランに行ったとき、メニュー表を見て料理を注文しますよね。するとウェイターさんが厨房に伝えて、シェフが料理を作ります。この場合、メニュー表がURL、ウェイターさんがルーティング、シェフがコントローラという関係になります。
CodeIgniterでは、この設定をapp/Config/Routes.phpというファイルで行います。このファイルに「このURLが来たら、このコントローラを呼び出してね」という指示を書いていくのです。
2. 基本的なルーティングの書き方
それでは、実際にルーティングを設定してみましょう。最も基本的な形は、$routes->get()メソッドを使う方法です。このgetというのは、HTTPメソッドのGETのことで、通常のウェブページを表示するときに使われます。
まず、app/Config/Routes.phpファイルを開いて、次のように書きます。
$routes->get('about', 'Home::about');
この一行の意味を詳しく説明しますね。'about'がURLの部分です。つまり、http://yoursite.com/aboutというURLにアクセスしたときの設定です。そして'Home::about'が実行するコントローラとメソッドです。Homeがコントローラ名、aboutがそのコントローラ内のメソッド名になります。
コントローラは、app/Controllersフォルダの中に作成します。上記の例では、Home.phpというファイルにabout()というメソッドが必要になります。
3. パラメータ付きのルーティング設定
URLに変数を含めたい場合もあります。例えば、ユーザーのプロフィールページで、それぞれのユーザーIDをURLに含めたいときなどです。CodeIgniterでは、このような動的なURLも簡単に設定できます。
パラメータを使うには、URLの中に(:num)や(:any)といった特殊な記号を使います。(:num)は数字のみを受け取り、(:any)は任意の文字列を受け取ります。
$routes->get('user/(:num)', 'User::profile/$1');
この設定では、http://yoursite.com/user/123のようなURLにアクセスすると、Userコントローラのprofile()メソッドが呼ばれ、123という数字が引数として渡されます。$1は最初のパラメータを表す特別な記号です。
コントローラ側では、次のように受け取ることができます。
public function profile($id)
{
echo "ユーザーID: " . $id;
}
4. 複数のパラメータを扱う方法
URLに複数のパラメータを含めることもできます。例えば、商品のカテゴリーと商品IDの両方をURLに含める場合などです。
$routes->get('product/(:any)/(:num)', 'Product::detail/$1/$2');
この場合、http://yoursite.com/product/electronics/456というURLにアクセスすると、Productコントローラのdetail()メソッドに、'electronics'と456という2つの値が渡されます。$1が最初のパラメータ、$2が2番目のパラメータを表します。
5. デフォルトコントローラの設定
ウェブサイトのトップページ、つまりhttp://yoursite.com/にアクセスしたときに表示するコントローラを設定することができます。これをデフォルトコントローラといいます。
Routes.phpファイルには、最初から次のような設定があります。
$routes->get('/', 'Home::index');
これは、サイトのルートURL(トップページ)にアクセスしたときに、Homeコントローラのindex()メソッドを実行するという意味です。この設定を変更すれば、トップページの表示内容を変えることができます。
また、$routes->setDefaultController('Home');という書き方もあります。これは、URLでコントローラが指定されていない場合に使用されるコントローラを設定します。
6. POSTリクエストのルーティング
これまではget()メソッドを使ってきましたが、フォームからデータを送信する場合など、POSTリクエストを扱う必要があります。その場合はpost()メソッドを使います。
例えば、お問い合わせフォームの送信処理を設定する場合は次のようになります。
$routes->post('contact/submit', 'Contact::submit');
この設定により、フォームからhttp://yoursite.com/contact/submitにPOSTリクエストが送信されると、Contactコントローラのsubmit()メソッドが実行されます。GETとPOSTを区別することで、セキュリティも向上します。
7. ルーティンググループの活用
管理画面など、特定のURL配下にたくさんのページがある場合、ルーティンググループを使うと便利です。これにより、共通のプレフィックス(URLの先頭部分)をまとめて設定できます。
例えば、管理画面のURLをすべて/adminで始めたい場合は、次のように書きます。
$routes->group('admin', function($routes) {
$routes->get('dashboard', 'Admin::dashboard');
$routes->get('users', 'Admin::users');
$routes->get('settings', 'Admin::settings');
});
この設定により、http://yoursite.com/admin/dashboard、http://yoursite.com/admin/users、http://yoursite.com/admin/settingsという3つのURLが使えるようになります。グループを使うことで、コードが見やすくなり、管理もしやすくなります。
8. ルーティングの優先順位
CodeIgniterのルーティングには優先順位があります。Routes.phpファイルに書かれた順番に、上から順にチェックされていきます。最初にマッチしたルートが使用されるため、より具体的なルートを上に、より一般的なルートを下に書く必要があります。
例えば、次のような設定があったとします。
$routes->get('news/latest', 'News::latest');
$routes->get('news/(:any)', 'News::view/$1');
この場合、news/latestという具体的なルートを先に書いています。もし順番を逆にすると、news/latestへのアクセスがnews/(:any)にマッチしてしまい、意図した動作にならない可能性があります。ルートを追加するときは、この優先順位を意識することが大切です。
9. ワイルドカードとカスタムルート
CodeIgniterでは、より柔軟なルーティングを実現するために、正規表現を使ったカスタムルートも設定できます。これにより、複雑な条件でのURL設定が可能になります。
例えば、日付形式のURLを扱いたい場合は、次のように書くことができます。
$routes->get('blog/([0-9]{4})/([0-9]{2})/([0-9]{2})', 'Blog::date/$1/$2/$3');
この設定では、http://yoursite.com/blog/2024/01/15のような形式のURLにマッチします。[0-9]{4}は4桁の数字、[0-9]{2}は2桁の数字を表します。これにより、年月日をそれぞれパラメータとして受け取ることができます。
正規表現は最初は難しく感じるかもしれませんが、使いこなせるようになると、非常に強力なツールになります。
10. ルーティングのテストとデバッグ
ルーティング設定が正しく動作しているか確認するには、実際にブラウザでURLにアクセスしてみるのが一番です。もしエラーが出た場合は、CodeIgniterのエラーメッセージをよく読んでください。多くの場合、どのコントローラやメソッドが見つからないかを教えてくれます。
また、spark routesというコマンドラインツールを使うと、現在設定されているすべてのルートを一覧表示できます。ターミナルやコマンドプロンプトで、プロジェクトのルートディレクトリに移動して、次のコマンドを実行してください。
php spark routes
このコマンドを実行すると、設定されているすべてのルートが表示され、URLとコントローラの対応関係を確認できます。ルーティングの設定ミスを見つけるのに非常に役立ちます。
ルーティングをマスターすることで、CodeIgniterでのウェブアプリケーション開発がぐっと楽になります。最初は基本的な設定から始めて、徐々に複雑な設定にも挑戦してみてください。