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;
    }
}