validate

Mojavi 初心者講座 validate

フォームのチェック

今回はフォームから与えられる値をチェックする一連の工程について解説します。

↑ページトップへ戻る


独自のバリデートメソッドを使う

バリデートには独自のバリデートメソッドを使う方法と、既定のバリデートクラスを使う方法があります。ここでは簡単な独自バリデートメソッドでのやり方を説明します。

バリデートメソッドはアクションの中に書きます。先ほどの足し算のプログラムを使って、10以下の数値を入れてはいけないという設定にしてみます。

↑ページトップへ戻る


アクション

先ほどのプログラムIndexAction.class.php

class Test_IndexAction extends Action{

  public function getRequestMethods(){
	return Request::POST;
  }

  public function execute(){
	$request = $this->getContext()->getRequest();

	$value_1 = $request->getParameter( 'value_1' );
	$value_2 = $request->getParameter( 'value_2' );

	$result = $value_1 + $value_2;
	$request->setAttribute( 'result', $result );

	return View::SUCCESS;
  }
}

これにvalidate()というメソッドを追加します。

  public function validate(){
	$request = $this->getContext()->getRequest();
	if( $request->getParameter( 'value_1' ) > 10 ||  
	$request->getParameter( 'value_2' ) > 10 ){
	  $request->setError( 'error', '10以下の値を入れて下さい。' );
	  return false;
	}
	return true;
				  }

validate()メソッドはtrue、又はfalseを返さなければなりません。エラーがあった場合はfalseを返します。

よって、上記のコードでは、value_1、またはvalue_2の値が10以上だった場合falseを返すようにしています。

$request->setError( 'error', '10以下の値を入れて下さい。' );

requestオブジェクトのerrorsプロパティに「error」というキーでエラーメッセージを設定しています。これは、前述のattibuteと同様の方法でビューで取得し、テンプレートHTMLへ反映させます。

エラーが無い場合は、execute()を実行します。

↑ページトップへ戻る


エラービューの作成

現時点までで、ビュー名は、

INTPUT  フォーム表示
SUCCESS  フォーム結果表示

を学びました。次に、エラーを表示するERRORビューを作ります。

エラーがあった場合、つまり、validate()falseを返した場合、自動的にビュー名はERRORになります。

よって、これから作るエラー表示ビュークラスは以下のようになります。

ファイル名: IndexErrorView.class.php
クラス名:  Test_IndexErrorView

実際のコード

class Test_IndexErrorView extends PHPView{
  public function execute(){
	$this->setDirectory( MO_WEBAPP_DIR . '/templates/Test' );
	$this->setTemplate( 'IndexError.html' );

	$request = $this->getContext()->getRequest();
	$this->setAttribute( 'error', $request->getError( 'error' ) );
  }
}

フォーム表示部分と微妙に異なるのは以下の部分です。 テンプレート名がIndexError.htmlとなっています。

また、

$this->setAttribute( 'error', $request->getError( 'error' ) );

とし、先ほどRequestオブジェクトにセットしたエラーメッセージを取得し、テンプレートに渡せるようにセットします。

↑ページトップへ戻る


エラー表示テンプレートの作成

エラー表示のテンプレート名は分かりやすいように、

IndexError.html

とします。

実際のコードは

<?= $template['error'] ?>

のみで結構です。これでエラーがあった場合

10以下の値を入れて下さい。

と表示されます。

↑ページトップへ戻る


既定のバリデータクラスを使う

上記のように毎回バリデータメソッドを書いていては、作業効率が悪いので、たいていは、既に定義されているバリデータクラスを使います。

これをするには、↑ページトップへ戻る


バリデート定義ファイル

メソッド部分

[methods]

 get  = ""
 post = "value_1, value_2"
 

これは、POSTメソッドで受け取った場合のnameを序列しています。ここで指定したnameに対応する値にバリデータをかけます。

ネーム部分

[names]
 value_1.required = "Yes"

requiredは、value_1が必須項目なのかどうかを表記します。記入されないで送信した場合エラーを返す設定です。

 value_1.required_msg = "一番目の数字を入力して下さい。"

required_msgは未記入でvalue_1を送信した場合のエラーメッセージです。

 value_1.validators = "numValidator"

validatorsはこの値をチェックするバリデータの名前を記入します。これは、以下のバリデータ項目と対応します。

バリデータ部分

[numValidator]

上記で設定したバリデータ名をここに記入します。つまり、value_1ではnumValidator以下で設定したバリデータを使う、という意味になります。

 class = "NumberValidator"

使用するバリデータクラスを設定します。バリデータクラスには、

NumberValidator: 数値チェック

StringValidator: 文字列チェック などがあります。

 param.max = "10"

value_1の最大値を設定します。これを超えるとエラーになります。

 param.max_error = "10以下の数字を入力して下さい。"

最大値のエラーが出た場合のエラーメッセージです。

これを書いておけば、validate()を書かなくても、自動的にバリデートをしてくれます。つまり、上記で設定した評価基準に満たない場合、エラーになり、ERRORビューを読み込みます。

成功の場合はexecute()を実行します。

あと、ビューの

$this->setAttribute( 'error', $request->getError( 'error' ) );

の部分を以下のように書き換えてください。

$this->setAttribute( 'error', join( "<br>", $request->getErrors() ) );

getErrors()Requestオブジェクトのプロパティのerrors配列を丸ごと取得します。

バリデート設定ファイルを書いた場合はエラーが配列で”errors’に入っているので、これをテンプレートに表示するには、配列をjoinしておくか、テンプレートでforeachなどで表示する必要があります。

↑ページトップへ戻る