バリデーションの使用方法は、大きく分けて4つあります。
(1) 個別検証パターン | 1つの項目に対して、複数バリデーションを設定するパターン |
---|---|
(2) 検証グループパターン | 事前に検証グループを作成して、項目にセットするパターン |
(3) 設定ファイル検証読み込みパターン | 設定ファイルから検証グループを読み込むパターン |
(4) 設定ファイル検証実行パターン | 設定ファイルで設定した内容で検証を実行するパターン |
バリデーション機能を使用する場合、(1)~(4)共通で事前にバリデーションマネージャクラスをインクルードします。
SyL_Loader::lib('ValidationManager');
(1) 個別検証パターンの例
バリデーションマネージャと各種バリデーション基本パターンを生成してから、 バリデーションマネージャに対して、1項目づつバリデーション基本パターンと項目情報を追加します。 全ての項目情報を追加し終えたらバリデーションを実行する方法です。
最も基本的なパターンになります。
// バリデーションマネージャオブジェクト作成 $validation_manager =& new SyL_ValidationManager(); // バリデーション基本パターン作成 $v_require =& SyL_Validator::create('require', '{name}は必須です'); $v_length20 =& SyL_Validator::create('length', '{name}は最大{max}文字 (バイト)まで入力できます', array('max'=> 20)); // 個別の入力項目に対して、バリデーション基本パターンを定義 $validation_manager->add($v_require, $data->get('name'), 'name1', '名前'); $validation_manager->add($v_length20, $data->get('name'), 'name2', '名前'); // バリデーション実行 if (!$validation_manager->execute()) { // エラーの場合、エラーメッセージを取得する $error_message = $validation_manager->getErrorMessageAll(); }
(2) 検証グループパターンの例
バリデーションマネージャと各種バリデーション基本パターンを生成してから、 バリデーショングループを作成し、バリデーション基本パターンを複数登録したバリデーショングループパターンを作成します。 1つの項目に対して、バリデーショングループパターンを登録し、全ての項目が登録し終えたら、 バリデーションを実行する方法です。
先にバリデーション基本パターンをグループ化することに、同じバリデーションを何回も登録する場合にコード内容を簡素化できます。
// バリデーションマネージャオブジェクト作成 $validation_manager =& new SyL_ValidationManager(); // バリデーション基本パターン作成 $v_require =& SyL_Validator::create('require', '{name}は必須です'); $v_length20 =& SyL_Validator::create('length', '{name}は最大{max}文字 (バイト)まで入力できます', array('max'=> 20)); // バリデーショングループを作成し、バリデーション基本パターンを追加 $vs_name =& SyL_Validators::create(); $vs_name->add($v_require); $vs_name->add($v_length20); // 個別の入力項目に対して、バリデーショングループを定義 $validation_manager->add($vs_name, $data->get('name'), 'name', '名前'); // バリデーション実行 if (!$validation_manager->execute()) { // エラーの場合、エラーメッセージを取得する $error_message = $validation_manager->getErrorMessageAll(); }
(3) 設定ファイル検証読み込みパターンの例
バリデーション定義を外部ファイル(ini, xml)で作成し、バリデーションマネージャを使用してバリデーション設定を取得します。 1項目に対してバリデーション設定を追加し、全ての項目が登録し終えたら、 バリデーションを実行する方法です。
バリデーション定義のみ外部ファイルで定義するので、項目とバリデーションが分離されバリデーション管理が楽になります。
// バリデーション設定ファイルパス $file = '/path/to/validation.xml'; // バリデーションマネージャオブジェクト作成 $validation_manager =& new SyL_ValidationManager(); // バリデーション設定取得 $config =& SyL_ValidationManager::getConfig($file); // バリデーショングループを設定ファイルから取得して定義 $validation_manager->add($config->get('name'), $name, 'name', '名前'); // バリデーション実行 if (!$validation_manager->execute()) { $error_message = $validation_manager->getErrorMessageAll(); }
(4) 設定ファイル検証実行パターンの例
バリデーション定義と項目名を外部ファイル(ini, xml)で作成し、バリデーションマネージャを使用してバリデーション設定を取得し、 それをバリデーションマネージャで実行する方法です。
バリデーション定義と項目名を外部ファイルで定義するので、コードの見通しが良くなり修正もしやすくなります。
// バリデーション設定ファイルパス $file = '/path/to/validation.xml'; // バリデーションマネージャオブジェクト作成 $validation_manager =& new SyL_ValidationManager(); // バリデーション設定取得 $config =& SyL_ValidationManager::getConfig($file); // バリデーション実行 if (!$validation_manager->executeConfig($config)) { $error_message = $validation_manager->getErrorMessageAll(); }
バリデーションの内容は、バリデーション基本パターン作成時に設定します。例えば、
$v_require =& SyL_Validator::create('require', '{name}は必須です', array());
では、createメソッドの引数の 'require' がバリデーションの種類で、'{name}は必須です' が対応するエラーメッセージとなります。 また、バリデーションの種類によりオプションパラメータ(上記では array() 部分)を指定できるものもあります。
バリデーション基本パターンのエラーメッセージに、{name}が含まれていた場合は、項目名に置換されます。 また、オプションパラメータ名も{*}で表された場合、オプションパラメータ値に置換されます。
$v_length20 =& SyL_Validator::create('length', '{name}は最大{max}文字 (バイト)まで入力できます', array('max'=> 20)); // このバリデーションを項目名が「名前」の要素に追加した場合、 // エラーメッセージは「名前は最大20文字(バイト)まで入力できます」に // なります。
バリデーションの種類は、下記のものがデフォルトで使用できます。
種類 | 設定値 | 概要 |
---|---|---|
必須 | require | 何かしら値がなければエラーとなります。selectやradio等でも選択された項目のvalue値が空であればエラーとなります。 <オプションパラメータ> trim (bool) 入力値にtrim関数を適用してからチェックするかを設定します。 |
バイト数 | length | 設定値より、入力された値のほうがバイト数が大きくなるとエラーとなります。 <オプションパラメータ> max (int) 入力可能な最大バイト数を設定します。 max_error_message (string) 最大値エラーの場合、元のエラーメッセージと置き換えます。 min (int) 入力可能な最小バイト数を設定します。 min_error_message (string) 最小値エラーの場合、元のエラーメッセージと置き換えます。 |
半角数値 | numeric | 入力値が、半角数値でなければエラーとなります。 <オプションパラメータ> dot (bool) 少数点を許可するフラグ max (int) 入力可能な最大数を設定します。 max_error_message (string) 最大数エラーの場合、元のエラーメッセージと置き換えます。 min (int) 入力可能な最小数を設定します。 min_error_message (string) 最小数エラーの場合、元のエラーメッセージと置き換えます。 |
半角数値 | numeric | 入力値が、半角数値でなければエラーとなります。 <オプションパラメータ> dot (bool) 少数点を許可するフラグ max (int) 入力可能な最大数を設定します。 max_error_message (string) 最大数エラーの場合、元のエラーメッセージと置き換えます。 min (int) 入力可能な最小数を設定します。 min_error_message (string) 最小数エラーの場合、元のエラーメッセージと置き換えます。 |
半角英字 | alpha | 入力値が、半角アルファベットでなければエラーとなります。 <オプションパラメータ> extra (string) 半角アルファベット以外の許可文字を設定します。(マルチバイト文字不可) |
半角英数字 | alphanumeric | 入力値が、半角アルファベットまたは数値でなければエラーとなります。 <オプションパラメータ> extra (string) 半角アルファベット、数値以外の許可文字を設定します。(マルチバイト文字不可) |
比較 | compare | 入力値が、設定値との比較関係を満たさなければエラーとなります。 <オプションパラメータ> comp (string) 入力値と比較する条件。 ==, !=, ===, !==, <=, >=, <, > comp_value (string) 入力値と比較する値 |
正規表現 | regex | 入力値が、設定した正規表現に一致しなければエラーとなります。 <オプションパラメータ> format (string) 正規表現。 内部的にはpreg_matchが実行される。 |
メール | 入力値が、メールアドレスでなければエラーとなります。 ※厳密にRFCに基準したチェックではありません。 |
|
日付 | date | 入力値が、日付形式でなければエラーとなります。 正規表現で表すと、YYYY[-|/]?MM[-|/]?DD (HH24:MI:SS)? <オプションパラメータ> past (bool) システム日付と比較して過去日付を許可するフラグ。 future (bool) システム日付と比較して未来日付を許可するフラグ。 max (string) 入力可能な最大日付をstrtotime形式で設定します。 max_error_message (string) 最大日付エラーの場合、元のエラーメッセージと置き換えます。 min (int) 入力可能な最小日付をstrtotime形式で設定します。 min_error_message (string) 最小日付エラーの場合、元のエラーメッセージと置き換えます。 |
開発の現場では、通常は考えられないような業務仕様が存在し、それに伴ったバリデーションも作成しなければならないことも多々あります。 ここでは標準で添付されているバリデーション以外で、バリデーションを独自に作成する方法を説明します。
(カスタムバリデーション例)
<?php class SyL_ValidationValidatorCustom1 extends SyL_ValidationValidator { /** * 値が 0 または 1 の場合を検証する * * @access public * @param string 検証対象値 * @return bool true: エラー無し, false: エラーあり */ function validate($value) { return (($value === '0') || ($value === '1')); } } ?>
この例のように、一定の仕様に従いバリデーションクラスを作成します。
・クラス名は、「SyL_ValidationValidator + (任意の英数字)」
・クラスには、「validate」メソッドを作成し、引数を1つ作成します。(検証値が入ります)
・「validate」メソッドの戻り値は、検証がOKの場合 true, エラーの場合 false を返します。
これ以外にも、実際にバリデーションを実行するときパラメータを使用して、内部ロジックを変更することもできます。 その場合クラス内部変数 parameters 配列を作成してください。
/** * パラメータ * * @access protected * @var array */ var $parameters = array( 'format' => null );
外部バリデーション定義ファイルの仕様