10月 112012
 

こんばんは。ファガイです。
本日はFuelPHPのValidationクラスについてまとめてみました。
長かった・・・。

FuelPHPのValidationクラス

FuelPHPのバリデーションにはValicationクラスを利用すると簡単です。

バリデーションクラスを利用する際は以下のようにします。

$val = Validation::forge();

これで、Validationクラスがforgeされ、インスタンスが作成されます。そして次に、検証ルールを設定していきます。
検証ルールはadd_field()メソッドを使用するか、add()メソッドとadd_rule()メソッドを使用する方法があります。add_field()メソッドでは文字列のみの検証しか出来ないので今回はadd()メソッドとadd_rule()メソッドを使用する方法を書こうと思います。

基本

$val = Validation::forge();
$val->add('password','パスワード')
    ->add_rule('required')
    ->add_rule('min_length', 8)
    ->add_rule('max_length', 12)
    ->add_rule('valid_string', array('alpha','numeric','dashes','utf8'));

if($val->run()){
    //バリデーションを通った
}

解説

まずは、add()メソッドについてです。

add()メソッド
第1引数:フィールド名
第2引数:ラベル名

まず、add()メソッドの第1引数のフィールド名はFormクラスでもやってましたが、inputタグ等のnameの部分となります。ラベル名はバリデーションのメッセージを表示する際の項目名となります。

add_rule()メソッド

第1引数:規則名
第2引数以降:規則により変動

第2引数の規則により変動というのがわからないですね。わかりやすいように表にしています。ちなみに、この規則以外に引数が1つだけのPHPの標準関数も使用することができます。(trimとか)

 

ルール名とその引数パラメータ

規則 パラメータ 内容
required なし 必須項目
match_value $compare,$strict $compareに対象値。一致していれば成功。$strictがtrueで==ではなく===での比較。
match_pattern $pattern Perl互換の正規表現を指定。マッチしたら成功。
match_field $field 指定したフィールドの値と等しければ成功。比較は===。
min_length $length 指定した文字数以上なら成功。
max_length $length 指定した文字数以下なら成功。
extact_length $length 指定した文字数なら成功。
valid_email なし Emailの形式であれば成功
valid_emails なし Emailの形式でカンマ区切りで列挙していれば成功。
valid_url なし URLの形式なら成功。
valid_ip なし IPの形式なら成功。
numeric_min $min_val 指定した数値以上なら成功。
numeric_max $max_val 指定した数値以下なら成功。
valid_string $flags 許可する文字種の配列を指定し、それ以外の文字が含まれていなければ成功。
required_with $field $fieldが入力済みの場合にこのフィールドも入力されていれば成功。

 

補足

add_rule()メソッドは上に書いたものが先にバリデーションされます。基本の例の場合だと、最初にrequiredが設定されているので必須なのにかかれてない場合はそれ以降のadd_rule()に関しては検証を行いません。
ちなみに、match_fieldの使い道ですが、パスワードの再入力等に使えます。新しく登場したrequired_withは名前等に使えます。(苗字が入力済みならー・・・)

valid_stringについて

規則の最後にあったvalid_stringについてです。基本の例にも載せてますが、配列で許可する文字種の配列を指定します。その文字種についてもまとめなくてはですね。はい、以下です。

文字種 内容
alpha アルファベット
uppercase 大文字のアルファベット(alpha併用)
lowercase 小文字のアルファベット(alpha併用)
numeric 数字
spaces スペース
newlines 改行コード
tabs タブ
dots ドット、ピリオド
punctuation 区切り文字(.,!?:;)
dashes -及び_
utf8 正規表現にutf8修飾子の付加(/u)

これだけあります。なんとも、多いですね。ちなみに、valid_stringに続く第2引数を指定しない場合はデフォルトでarray(‘alpha’,’utf8)が設定されます。しかし、書いたほうがわかりやすいので書いたほうがいいと思います。

独自の検証ルール

独自の検証ルールも指定することができます。今回は触れないでおきます。

とか言いつつ簡単に書いておくと、

  1. クラスを作る(classesフォルダ内)。
  2. メソッドを書く(接頭辞にはvalidationを)。
  3. add_callable()メソッドでクラスを呼び出す。
  4. 使う時は接頭辞を除いたメソッド名で。(add_rulesに)

こんな感じです。

エラーメッセージを出す

エラーメッセージを出す場合は、$val->error()内に配列としてエラー文が格納されています。なので、foreach等で回すと良いかと思います。

エラーメッセージが微妙に英語・・・

この問題を直すにはまずconfig.phpのlanguageの項目をjaにします。

'language' => 'ja',

ちなみに、一行下のlanguage_fallbackはlanguageの値に該当する言語ファイルがない場合のデフォルトとなる言語ファイルの値です。

次に、core/lang/en内にあるvalidation.phpAPPPATH/lang/ja内にコピーしましょう。jaフォルダは新しく作ります。

大体は内容の把握ができるかと思いますが、こちらでも書いておきます。

<?php
return array(
    'required' => ':label は入力必須項目です。',
    'min_length' => ':label は :param:1 文字以上にしてください。',
    'max_length' => ':label は :param:1 文字以下にしてください。',
    'exact_length' => ':label は :param:1 文字にしてください。',
    'match_value' => ':label が :param:1 と一致しません。',
    'match_pattern' => ':label の形式が異なります。',
    'match_field' => ':label が :param:1 と異なります。',
    'valid_email' => ':value を正しいメールアドレスの形式にしてください。',
    'valid_emails' => ':label を正しいメールアドレスの形式にしてください。',
    'valid_url' => ':label を正しいURLの形式にしてください。',
    'valid_ip' => ':label を正しいipの形式にしてください。',
    'numeric_min' => ':label の値は :param:1 以上にしてください。',
    'numeric_max' => ':label の値は :param:1 以下にしてください。',
    'valid_string' => ':label に不正な文字が含まれています。',
    'required_with' => ':label は入力必須項目です。',
);

こんなところでしょうか。次回はfieldsetクラスか、認証を書きます。

参考書籍:FuelPHP入門

Pocket

 Posted by at 10:24 PM

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*