CodeIgneiterなどのフレームワークを利用する以前のPHPプログラミングでは、Smartyのようなテンプレートエンジンを使用した開発スタイルが人気でした。Smartyのようなテンプレートエンジンは、『アプリケーション』と『プレゼンテーション』を分離し、プログラマとデザイナの仕事を独立した管理を行えるようにするのが主な目的でした。これによりプログラマとデザイナの並行開発可能になり、生産性を上げることができました。
このテンプレートエンジンの考えを推し進めたのが、MVCモデルと呼ばれる開発スタイルです。MVCモデルとは、アプリケーションの制御を担う、Contorollerと呼ばれる部分と、データベースへのアクセス、制御を行うModel部分、画面表示の制御を行うView部分に分かれます。
コントローラとURI
コントローラは、ユーザからのHTTPリクエストを処理するシステムの心臓部です。CodeIgneiterは、他のPHPフレームワークと異なり、ビューやモデルを使用せず、コントローラだけで構築することができます。
コントローラは、その名前がURIに関連づけられたクラスファイルです。文章での説明では分かり難くなりますので、実際にプログラムを動かしながら見てみましょう。
Eclipseを起動すると、ワークスペースランチャーが表示されます。今後、この表示が必要ない場合は、左下にチェックを入れ『OK』をクリックします。
ファイル→新規→PHPファイルとクリックします。
新規PHPダイアログでファイル名を入力(test.php)し、ソースフォルダの参照をクリックします。
CodeIgniter→application→controllersとクリックして、『OK』ボタンをクリックします。
内容を確認して、『完了』をクリックします。
『test01.php』に以下のような簡単なコードを入力してみます。このとき、クラス名とファイル名は同一にし、頭文字は大文字にします。
class Test01 extends CI_Controller{ function index() { echo "デフォルトメソッドです"; } function message2() { echo "message02です"; } function message03() { echo message02です"; } }
実際にブラウザで確認してみましょう。『http://localhost/CodeIgniter/test01』と入力すると、『デフォルトメソッドです』と表示されます。
次に、『http://localhost/CodeIgneiter/test01/index』と入力してみます。これも上記と同様に『デフォルトメソッドです』と表示されます。
index()メソッドは、『デフォルトメソッド』と呼び、URLからメソッド名が省略されると呼び出されるメソッドです。
そして、最後に『http://localhost/CodeIgniter/test01/message02』と入力してみます。すると、『message02です』と表示されます。同様に最後がmessage03の場合は、『message03です』と表示されます。
URL に3つ以上のセグメントが含まれる場合、3番目以降のセグメントは、メソッドに引数として渡されます。
『http://localhost/CodeIgniter(ここまでがドメイン名)/コントローラ名(第1セグメント)/メソッド名(第2セグメント)/第1引数(第3セグメント)/第2引数(第4セグメント)』
Test01コントローラに以下のメソッドを追加入力してみます。
function keisan($par1,$par2) { echo $par1+$par2; }
ブラウザで表示してみると以下のようになります。
メソッドとは、一般には、方法、手法といった意味。オブジェクト指向プログラミングにおいて、クラスにはメソッドとフィールドがあり、メソッドには、処理内容を記述する(コトバンクより)。分かり易く言えば方程式のようなものと考えた方がいいと思います。こうすればこうなると言うことを記述したものと覚えておきましょう。
コントローラの命名規則
コントローラを作成する場合は、以下の命令規則に従って、クラス名とファイル名を付与し、『application/controllers』ディレクトリに保存します。
- クラス名は大文字で始め、controllerクラスを継承(extends)する。
- クラス名とファイル名は必ず同じ名前にする(但し、ファイル名の頭文字は大文字から小文字に変更する)。
コントローラのメソッド
コントローラは複数のメソッドを持つことができます。特殊な役割を持つメソッドを使用する場合は、命名規則に従って命名する必要があります。以下に簡単に特殊な役割を持つメソッドを列記します。説明すると長くなりますので、簡単な説明にとどめます。
デフォルトメソッド
デフォルトメソッドは先ほど説明していますが、第2セグメントを省略したときに実行されるメソッドです。メソッド名は『index()』と命名する必要があります。
再マップメソッド
再マップメソッドは、常に呼び出されるメソッドです。デフォルトメソッドより優先されますので、デフォルトメソッドは必要なくなります。『_remap()』と命名します。
出力メソッド
ブラウザに出力する直前に処理をおこなうメソッドです。文字のエンコードなどの処理に使います。『_output()』と命名します。
コンストラクタメソッド
コントローラが呼び出されたときに1度だけ実行されるメソッドです。主にライブラリの初期化や毎回実行されたい場合などに使うと便利です。PHP4では『クラス名』と同じで、PHP5からは『__construct』(アンダースコア2つ)と命名します。コンストラクタを使用する場合は、どのようなコントローラであるかにかかわらず 必ず『parent::__construct();』のあとにコードを書く必要があります。
プライベートメソッド
HTTPリクエストによる直接のメソッド呼び出しを拒否するときに使用するメソッドです。『_メソッド名』(アンダースコア一つをメソッド名の先頭に付ける)と命名します。
予約済メソッド
CodeIgniterで既に予約済のメソッド名です。詳細は、http://codeigniter.jp/user_guide_ja/general/reserved_names.htmlで調べて下さい。