ドキュメント
リリースカレンダー
リンク
SourceForge.jp SourceForge.JPへ
php.net PHP公式サイトへ
TOP  >  ドキュメント > 機能(フレームワーク非依存)  >  バリデーション

バリデーション

1. バリデーションパターン

バリデーションの使用方法は、大きく分けて4つあります。

(1) 個別検証パターン 1つの項目に対して、複数バリデーションを設定するパターン
(2) 検証グループパターン 事前に検証グループを作成して、項目にセットするパターン
(3) 設定ファイル検証読み込みパターン 設定ファイルから検証グループを読み込むパターン
(4) 設定ファイル検証実行パターン 設定ファイルで設定した内容で検証を実行するパターン

2. バリデーション使用例

 バリデーション機能を使用する場合、(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文字(バイト)まで入力できます」に
// なります。

3. バリデーション種類

バリデーションの種類は、下記のものがデフォルトで使用できます。

種類 設定値 概要
必須 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が実行される。
メール email 入力値が、メールアドレスでなければエラーとなります。
※厳密に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)
 最小日付エラーの場合、元のエラーメッセージと置き換えます。

4. カスタムバリデーション

 開発の現場では、通常は考えられないような業務仕様が存在し、それに伴ったバリデーションも作成しなければならないことも多々あります。 ここでは標準で添付されているバリデーション以外で、バリデーションを独自に作成する方法を説明します。

(カスタムバリデーション例)

<?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
    );

外部バリデーション定義ファイルの仕様