CodeIgniterのURLルーティングとコントローラ呼び出しを完全解説!初心者向けガイド
生徒
「CodeIgniterで、URLを入力するとどうやってプログラムが動くんですか?」
先生
「URLから自動的にコントローラというファイルのメソッドが呼び出される仕組みがあるんです。これをルーティングと言います。」
生徒
「ルーティング?コントローラ?難しそうですね...」
先生
「大丈夫です!身近な例えで説明しますね。レストランで注文すると料理が出てくるように、URLを指定するとプログラムが実行される仕組みです。それでは詳しく見ていきましょう!」
1. CodeIgniterとは?PHPフレームワークの基礎知識
CodeIgniter(コードイグナイター)は、PHPフレームワークの一つです。フレームワークとは、プログラムを作るときの土台となる枠組みのことで、よく使う機能があらかじめ用意されています。例えるなら、家を建てるときの設計図のようなものです。一から全部作る必要がなく、決まった方法で効率的にウェブサイトやアプリケーションを開発できます。
CodeIgniterは、特に初心者に優しい設計で、シンプルで分かりやすいのが特徴です。ファイルの配置や書き方に一定のルールがあり、それに従うことで誰でも同じような構造のプログラムを作ることができます。
2. コントローラとは?プログラムの司令塔
コントローラ(Controller)は、CodeIgniterの中心となる重要なファイルです。レストランで例えると、お客さんからの注文を受けて、キッチンに指示を出すウェイターのような役割を果たします。
コントローラはapp/Controllers/というフォルダの中に保存されるPHPファイルで、ユーザーからのリクエスト(要求)を受け取り、必要な処理を実行して、結果を画面に表示する指示を出します。例えば「商品一覧を表示する」「ユーザー情報を登録する」といった処理を担当します。
コントローラの中にはメソッドという機能が複数入っています。メソッドとは、特定の仕事をするプログラムのまとまりのことです。一つのコントローラファイルの中に、複数のメソッドを作ることができます。
3. URLからコントローラが呼び出される基本の流れ
CodeIgniterでは、ブラウザのアドレスバーに入力するURLと、実行されるコントローラのメソッドが対応しています。この対応関係を自動で処理してくれる仕組みをルーティングと呼びます。
基本的なURLの構造は次のようになっています:
http://example.com/コントローラ名/メソッド名/パラメータ
例えば、http://example.com/products/listというURLにアクセスすると、Productsコントローラのlistメソッドが実行されます。まるで住所を指定すると、その場所に自動で案内してくれるカーナビのような仕組みです。
4. 実際のコントローラファイルの作り方
それでは実際にコントローラファイルを作成してみましょう。CodeIgniterでコントローラを作るには、app/Controllers/フォルダの中にPHPファイルを作成します。ファイル名の最初の文字は大文字にするルールがあります。
例として、商品情報を扱うProducts.phpというコントローラを作成してみます:
<?php
namespace App\Controllers;
class Products extends BaseController
{
public function index()
{
echo "商品一覧ページです";
}
public function detail()
{
echo "商品詳細ページです";
}
}
このコードを順番に説明します。namespaceは名前空間といって、ファイルの場所を示すものです。class ProductsでProductsという名前のクラス(設計図)を作成しています。extends BaseControllerは、CodeIgniterの基本機能を継承する(受け継ぐ)という意味です。
public function index()とpublic function detail()が、それぞれメソッドです。publicは外部から呼び出せるという意味で、functionは関数(機能)を作るときのキーワードです。
5. URLとメソッドの対応関係を理解する
先ほど作成したProductsコントローラは、次のようなURLでアクセスできます:
http://example.com/products
→ Products コントローラの index メソッドが実行される
http://example.com/products/index
→ Products コントローラの index メソッドが実行される
http://example.com/products/detail
→ Products コントローラの detail メソッドが実行される
メソッド名を省略すると、自動的にindexメソッドが呼び出されます。indexは、そのコントローラのデフォルト(初期設定)のメソッドという意味です。本屋さんで例えると、「小説コーナーに行って」と言われたら入口に案内されるようなイメージです。
コントローラ名とメソッド名は、URLでは小文字で書くことができます。CodeIgniterが自動的に大文字小文字を判断して、正しいコントローラを見つけてくれます。
6. パラメータを受け取るメソッドの作り方
URLから値を受け取って処理することもできます。例えば、商品番号を指定して詳細を表示したい場合、メソッドにパラメータ(引数)を設定します。パラメータとは、メソッドに渡す情報のことです。
<?php
namespace App\Controllers;
class Products extends BaseController
{
public function show($id)
{
echo "商品番号: " . $id . " の詳細情報";
}
}
この場合、http://example.com/products/show/123というURLにアクセスすると、次のように表示されます:
商品番号: 123 の詳細情報
URLの最後の123が、メソッドの$idパラメータに自動的に渡されます。複数のパラメータを受け取ることもできます。例えばpublic function search($category, $keyword)のように書けば、カテゴリとキーワードの両方を受け取れます。
7. デフォルトコントローラの設定方法
サイトのトップページ(http://example.com/)にアクセスしたとき、どのコントローラを表示するかを設定できます。これをデフォルトコントローラといいます。
設定はapp/Config/Routes.phpファイルで行います。このファイルを開くと、次のような記述があります:
<?php
$routes->get('/', 'Home::index');
この設定により、トップページにアクセスするとHomeコントローラのindexメソッドが実行されます。別のコントローラをトップページにしたい場合は、'Home::index'の部分を変更します。例えば商品一覧をトップページにしたいなら'Products::index'と書き換えます。
8. ルーティングのカスタマイズ方法
URLとコントローラの対応関係は、自由にカスタマイズすることができます。app/Config/Routes.phpファイルで独自のルートを設定できます。
例えば、http://example.com/item/123というURLで商品詳細を表示したい場合:
<?php
$routes->get('item/(:num)', 'Products::show/$1');
(:num)は数字を表すプレースホルダー(場所取り)で、URLの数字部分を$1として受け取ります。このように設定すると、実際にはProductsコントローラのshowメソッドが呼び出されますが、URLはitemという分かりやすい名前にできます。
他にも(:any)で任意の文字列、(:alpha)でアルファベットのみを受け取るなど、様々なパターンが使えます。これにより、ユーザーに分かりやすいURLを設計できます。
9. コントローラが見つからないときの動作
存在しないコントローラやメソッドにアクセスすると、CodeIgniterは404エラーページを表示します。404とは「ページが見つかりません」という意味のエラーコードです。
例えば、http://example.com/notexistのように、存在しないコントローラ名を指定すると、エラーページが表示されます。開発中は詳しいエラー情報が表示されますが、本番環境では一般的なエラーページが表示されるように設定できます。
このエラーページもapp/Views/errors/フォルダで自由にカスタマイズできます。デザインを変更して、ユーザーに優しいエラーページを作成することができます。
10. コントローラからビューを表示する基本
実際のウェブサイトでは、HTMLで作られた画面を表示します。CodeIgniterでは、画面の表示部分をビュー(View)というファイルで管理します。コントローラからビューを呼び出して画面を表示する流れを見てみましょう。
まずapp/Views/フォルダにproduct_list.phpというビューファイルを作成します:
<!DOCTYPE html>
<html>
<head>
<title>商品一覧</title>
</head>
<body>
<h1>商品一覧ページ</h1>
<p>ここに商品リストが表示されます</p>
</body>
</html>
そして、コントローラからこのビューを呼び出します:
<?php
namespace App\Controllers;
class Products extends BaseController
{
public function list()
{
return view('product_list');
}
}
view('product_list')という関数で、ビューファイルを読み込んで表示します。ファイル名の.phpは省略できます。この仕組みにより、プログラムのロジック(処理)と画面デザインを分離して管理できるようになります。レストランで例えると、料理を作る人(コントローラ)と、お皿に盛り付ける人(ビュー)が分担しているようなイメージです。