validation機能実装、途中経過

入力フォームテンプレートを下記のように用意すると、

<form action="/input.php/regist" method="post">
  {moony_text name='name' errorClass='error' xhtml=true}
  {moony_error name='name' prefix='<span class="error">' postfix='</span>'}<br />
  <input type="submit" />
</form>

実際のhtmlとして以下のように展開される。

<form action="/input.php/regist" method="post">
  <input type="text" name="name" value="" />
  <br />
  <input type="submit" />
</form>

送信を受けるアクションクラスで以下のようにvalidateメソッドを実装すると、

class RegistAction extends Moony_Action
{
  function validate($request, $errors)
  {
    $is_valid = true;

    // 必須入力チェック
    $is_valid = Moony_Validator::validateRequired($request, $errors, 'name', '名前が入力されていません');

    // 'abc'と入力されたかチェック
    if ($is_valid && $request->get('name') != 'abc') {
      $errors['name'] = '名前の入力が正しくありません';
      $is_valid = false;
    }

    return $is_valid;
  }

  function execute($request, $response)
  {
    // 入力が正しい場合の処理
  }
}

項目'name'が未入力の場合、入力画面を以下のように再表示する。

<form action="/input.php/regist" method="post">
  <input type="text" name="name" value="" class="error" />
  <span class="error">名前が入力されていません</span><br />
  <input type="submit" />
</form>

項目'name'に'bcd'と入力された場合、入力画面を以下のように再表示する。

<form action="/input.php/regist" method="post">
  <input type="text" name="name" value="bcd" class="error" />
  <span class="error">名前の入力が正しくありません</span><br />
  <input type="submit" />
</form>

今のところこんな感じ。入力項目を保持、入力画面を再表示するためにSmartyプラグイン使いまくり。Strutsのカスタムタグ風味。