フォーム値の自動検証を行う(カスタムチェック編)
当然ですが、値の最小値や最大値、正規表現だけで全ての入力をチェックできるケースばかりとは限りません。アプリケーションによって、数々のパターンの入力チェックが必要になることと思います。
カスタムチェックの利用方法
この場合、アプリケーション固有のメソッドでチェックを行うことも可能で、具体的な手順は以下のようになります。
- フォーム値の'custom'属性にメソッド名を記述する
- 1.で指定したメソッドをアクションフォームクラスに定義する
1.については簡単で:
/** * @access private * @var array フォーム値定義 */ var $form = array( 'sample' => array( 'name' => 'サンプル', 'required' => true, 'custom' => 'checkSample', 'type' => VAR_TYPE_STRING, ), );
のように'custom' => 'メソッド名'とするだけです。次に、同じくアクションフォームにcheckSampleという名前でメソッドを定義します。
/** * チェックメソッド: サンプル * * @access public * @param string $name フォーム項目名 */ function checkSample($name) { if (strtotime($this->form_vars[$name]) > time()) { $this->ae->add($name, "{form}には未来の時間を入力してください", E_FORM_INVALIDVALUE); } }
以下に、チェックメソッドについて順に解説していきます。
カスタムチェックメソッドの引数
カスタムチェックメソッドは1つの引数$nameを取ります。ここにはチェックすべきフォーム名が指定されます。ですので、チェックすべきフォーム値には
$this->form_vars[$name]
でアクセスできるということになります。
カスタムチェックメソッドのエラー処理
フォーム値を検証して、エラーが発生した場合にはアクションエラーオブジェクトを利用してエラーを追加します。具体的には、上記の例の通り
$this->ae->add([フォーム名], [エラーメッセージ], [エラーコード]);
となります。フォーム名には迷わず$nameを指定して問題ありません。また、エラーコードは以下のいずれか、あるいはアプリケーション定義の任意のエラーコードを指定することが出来ますが、通常はE_FORM_INVALIDVALUEあるいはE_FORM_INVALIDCHARで問題ありません。
- E_FORM_WRONGTYPE_SCALAR(フォーム値型エラー(スカラー引数に配列指定))
- E_FORM_WRONGTYPE_ARRAY(フォーム値型エラー(配列引数にスカラー指定))
- E_FORM_WRONGTYPE_INT(フォーム値型エラー(整数型))
- E_FORM_WRONGTYPE_FLOAT(フォーム値型エラー(浮動小数点数型))
- E_FORM_WRONGTYPE_DATETIME(フォーム値型エラー(日付型))
- E_FORM_WRONGTYPE_BOOLEAN(フォーム値型エラー(BOOL型))
- E_FORM_WRONGTYPE_FILE(フォーム値型エラー(FILE型))
- E_FORM_REQUIRED(フォーム値必須エラー)
- E_FORM_MIN_INT(フォーム値最小値エラー(整数型))
- E_FORM_MIN_FLOAT(フォーム値最小値エラー(浮動小数点数型))
- E_FORM_MIN_STRING(フォーム値最小値エラー(文字列型))
- E_FORM_MIN_DATETIME(フォーム値最小値エラー(日付型))
- E_FORM_MIN_FILE(フォーム値最小値エラー(ファイル型))
- E_FORM_MAX_INT(フォーム値最大値エラー(整数型))
- E_FORM_MAX_FLOAT(フォーム値最大値エラー(浮動小数点数型))
- E_FORM_MAX_STRING(フォーム値最大値エラー(文字列型))
- E_FORM_MAX_DATETIME(フォーム値最大値エラー(日付型))
- E_FORM_MAX_FILE(フォーム値最大値エラー(ファイル型))
- E_FORM_REGEXP(フォーム値文字種(正規表現)エラー)
- E_FORM_INVALIDVALUE(フォーム値数値(カスタムチェック)エラー)
- E_FORM_INVALIDCHAR(フォーム値文字種(カスタムチェック)エラー)
- E_FORM_CONFIRM(確認用エントリ入力エラー)
最後に、エラーメッセージにはユーザ向けに表示したいエラーメッセージを指定します。なお、ここで「{form}」と記述するとフォーム表示名に置換されます。
なお、Ethna_ActionFormには予め以下のようなカスタムメソッドが定義されています。
- checkVendorChar: 機種依存文字
- checkBoolean: bool値
- checkMailaddress: メールアドレス
- checkURL: URL
例えばメールアドレスのチェックを行うには
'custom' => 'checkMailaddress',
と指定します。