validator実装案
Moony 0.10.0のvalidatorの実装について、シンプルに以下のような実装を考えている。
- アクションクラスにvalidateメソッドが存在する場合、filterより後、executより前にメソッドが実行される。
- validateメソッドは、引数として連想配列の参照を受け取る。この連想配列に項目名称をキーとするエラーメッセージを設定することにより、遷移先画面でのエラーメッセージ表示が可能になる。
- validateメソッドは、真偽値を返す。検証エラーが存在しない場合、TRUEを返す。
- 検証エラーが存在した場合、メンバ変数の$templateに遷移先のテンプレートファイル名を設定する(多くの場合入力画面のテンプレート)。この値はコントローラクラスによって読み取られ、Smartyを用いたレンダリングに使用される。validateメソッドは最終的にFALSEを返す。
実装サンプル:
class Accept { /** @var string リクエストパラメータ: name */ var $name; /** @var string 使用するテンプレート名称 */ var $template; /** * 入力値を検証します。 * * @access public * @param array $errors エラーメッセージを格納する連想配列 * @return boolean エラーがない場合TRUE */ function validiate($errors) { if (strlen($this->name) > 0) { // 何か入力されていればOK return TRUE; } // エラーメッセージの設定 $errors['name'] = '名前は必ず入力してください'; // 遷移先テンプレート名称の指定 $this->template = 'Input.tpl'; return FALSE; } }