8
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FuelPHPの配列のバリデーションについて

Last updated at Posted at 2016-05-27

FuelPHPで配列のバリデーションを行う場合はいくつかパターンがあるのでここで紹介します。

パターン1:配列の要素毎にバリデーションルールを設定
Validationインスタンスのadd/add_fieldメソッドで配列の要素を一つずつ設定することが出来ます。
要素一つ一つの形式をチェックしたい場合はこの方法が良いと思います。

例.

$validation = Validation::forge();  
$options = Input::post('option');
if (is_array($options)) {
	foreach ($options as $i => $v) {
		// 要素毎にバリデーションルール設定
		$validation->add_field("option.$i", 'オプション', "required|numeric_between[1,10]"); 
	}
}
$validation->run();
return $validation->error_message();

上記のように配列要素は「{パラメータ名}.{配列キー}」で指定します。
または「"option[$i]"」のように「{パラメータ名}[{配列キー}]」の書き方でも構いません。

パターン2:closureを使用
closureって何ぞや?という方はこちらを参考に。

closureは要素毎の形式ではなく、配列全体もしくは他要素と関連するバリデーションを行う場合に向いています。
例えば以下は配列の要素の数や要素の値の重複をチェックしています。

$validation->add('option', 'オプション')
    ->add_rule('required')
    ->add_rule(function($options) {
        // 3つ以上選択してるか
        if (count($options) < 3) {
            Validation::active()->set_message('closure', 'オプションは3つ以上選択してください');
            return false;        
        }
        
        // 値が重複してないか
        $unique_options = array_unique($options);
        if (count($unique_options) != count($options)) {
            Validation::active()->set_message('closure', 'オプションの値が重複しています');
            return false;        
        }
        return true;
    });
$validation->run();
return $validation->error_message();

ケースによってはどちらとも使うこともあります。
どのようにバリデーションを行いたいか、またはどのようにエラーを表示したいかによって使い分けると良いでしょう。

8
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?