Validation クラス

Validation クラスは、ユーザ入力をバリデーションする際の手助けをします。 フォームの生成とバリデーションを同時にしたい場合は、代わりに Fieldset クラスを使用してください。

エラーメッセージ

エラーは出力を柔軟に変えられる Validation_Error オブジェクトとして返されます。 もし Validation_Error オブジェクトが必要ないのであれば単純に Validation_Error オブジェクトを文字列型にキャストしてエラーメッセージを取得してください。

エラーメッセージは言語ファイル "validation.php" を設定することで自動的に読み込まれます。

バリデーションにおいて、エラーメッセージを操作する方法は 2 種類あります。

// バリデーションオブジェクトに対してエラーメッセージを変更する方法
$val->set_message('required', ':label フィールドは必須です。');

// 実際にこのフィールドがエラーかどうかに関われず、フィールドを指定してメッセージを変更する [訳注: エラーがない場合は $val->error('username') が false を返すため例外エラーになります]
echo $val->error('username')->get_message('ユーザー認証には :label フィールドを入力してください');
// username フィールドのバリデーションが失敗された場合、 "ユーザー認証には username フィールドを入力してください" が出力される
// それか、バリデーション未実行もしくはバリデーション成功の場合には何も出力しない

ここで気づいたと思いますが、エラーメッセージにはいくつか変数が用意されており、これらはフィールドのプロパティによって置換されます。 使用可能な変数を下記に列挙します

変数名 説明
:field フィールドの name 設定値に置換される
:label フィールドの label 設定値に置換される
:value バリデーションに失敗した value 値に置換される
:rule 失敗したバリデーションルール(名)に置換される。フレームワークが用意しているルール名はそのままで、 それ以外はコールバック関数名、または <クラス名>:<メソッド名> の形式で置換される。 (これはつまり、もし必要ならバリデーションルールを自作できるというヒントです)
:param:1 最初の追加パラメータ (後述) に置換される。:param:2 は、その次の追加パラメータ。以降、同様。

コールバック / クロージャーへの名前付け規則

コールバック形式のルールまたはクロージャーは全て、好きなように名前が付けらます。デフォルトでは次のように名前付けされます。

  • クロージャー: "closure"
  • array($class, $method): "$class:$method"
  • array($object, $method): get_class($object).":$method"

もし独自に名前を付けたい場合は下記のようなことが出来ます。

// 入力された値が奇数かどうかをチェックするルールを追加
// メソッド ->set_message('odd', ':label は奇数ではありません') とペアで使われることでしょう。(または、冒頭のエラーメッセージ用言語ファイルに 'odd' キーを追加しても良いです)
$field->add_rule(array('odd' => function($val) { return (bool) ($val % 2); }));

Validation Error オブジェクト

バリデーションはエラーオブジェクト(実際はバリデーション中に投げられる例外)を返します。 それらオブジェクトは実際のメッセージを取得する必要に応じて文字列型にキャストすることもできますし、 オブジェクトのままでエラー内容のメタデータを取得するのにも使えます。

$field

$error->field はエラーを起こした Fieldset_Field オブジェクトへの 参照

$value

$error->value バリデートが失敗した値

$rule

$error->rule 失敗したバリデーションルールの名前。 基本的にバリデーションルールとして渡された文字列になりますが、 独自に名前付けされた場合には別の文字列になる場合もあります。
'Class::method', array('Class', 'method') または、 array($object, 'method') などのコールバックとして渡された場合はシンプルに、 'Classname:methodname'という形式になります。

$params

バリデーションルールに渡された追加パラメータになります。 例えば、->add_rule('max_length', 25) をした場合は、array(25) というようになります。

get_message($msg = false, $open = '', $close = '')

エラーメッセージを取得します。エラーメッセージは書き換え可能です。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$msg false | string
false
false 指定した場合は、自身が所属するバリデーションインスタンスから、 またはコンフィグファイルから、メッセージの取得を試みます。 入力が空の場合、またはコンフィグにメッセージが見つからない場合は、デフォルトの代替用メッセージを返します。 文字列を指定した場合は、その文字列をメッセージとして使用し、 内包する変数を置換して返します。
$open string
''
メッセージの前に HTML を追加します。
$close string
''
メッセージの後に HTML を追加します。
返り値 string
// メッセージを <p> タグで囲んで取得する
	$message = $error->get_message(false, '<p>', '</p>');

	// 標準設定のメッセージ: "Validation rule :rule failed for :label" を使用する 
	$message = $error->get_message(null);

	// どんなエラーメッセージが与えられていようと上書き
	$message = $error->get_message('Validation failed for field :label.');