「とりあえず触ってみる」で作成した「何もしないアプリケーション」は単一のページを表示するだけでしたが、一般的なWebアプリケーションは
といったように複数のページで構成されることがほとんどで、さらに「入力内容が不正な場合はユーザー情報入力ページにエラーメッセージを埋め込んで再表示する」といった処理が要求される場合も多々あります。guessworkでは、このようなフローを持ったアプリケーションを見通しよく作成するために、コントローラクラスとアクションメソッドという概念を採用しています。
コントローラクラスとはWebアプリケーションの動作を制御するためのクラスで、Controllerクラスを継承して定義します。コントローラクラス名は「Controller」で終わるように命名する必要があります。なお、PHPではクラス名の大文字小文字は区別されないため、fooControllerやbarcontrollerのような表記でクラスを定義しても構いません。
正しいコントローラクラス名の例
間違ったコントローラクラス名の例
guessworkでは、コントローラクラスに定義された「execute」で始まるメソッドを「アクションメソッド」と呼び、必要に応じて自動的に呼び出すようになっています。
どのアクションメソッドが呼び出されるかは、「action」という名前のリクエストパラメータの値によって決定されるため、
http://example.com/simple.php?action=input
というURLにアクセスがあった場合は「executeInput」というメソッドが呼び出されます。PHPではメソッド名の大文字小文字が区別されないため、executeinputやExecuteInputといった表記で定義されたメソッドも呼び出されますが、execute_inputのようにアンダースコアが含まれる場合には呼び出されません。
以下のいずれかに該当する場合は、デフォルトのアクションメソッド「executeDefault」が呼び出されます。
なお「とりあえず触ってみる」のSimpleControllerがメソッドを何も定義していないのに正常に動作することからわかるように、Controllerクラスには何もしない「executeDefault」メソッドがあらかじめ定義されています。
デフォルトのアクションメソッド名をexecuteDefault以外のものに変更したい場合は、コントローラクラスのクラス変数「$_default_action」の値に「input」などの文字列を設定します。
class MailFormController extends Controller
{
var $_gw_default_action = 'input';
// デフォルトでこのメソッドが呼び出される
function executeInput()
{
}
}