37
37

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でバリデーション

Posted at

ちょっと前までjQueryで書いていたバリデーション処理をPHPに移行しました。
フィールド名で処理できるのはよいです。私はこっちのほうが気に入りです。

基本

// バリデーションクラスをインスタンス化
$val = Validation::instance();

// emailカラムにバリデートを設定
$val->add('email', 'メールアドレス')
    ->add_rule('required')
    ->add_rule('valid_email');

// 何も引数を指定しなかった場合、デフォルトで$_POSTが引き渡される
if($val->run()){
	// バリデーション成功の場合ここに入ってくる
}else{
	// バリデーション失敗の場合ここに入ってくる
	foreach($val->error as $key=>$value){
		// $key:'email'
		// $value:エラー
		// $value->get_message():エラーメッセージ
	}
}

ちなみにデフォルトのvalid_emailの中身はfilter_var($val, FILTER_VALIDATE_EMAIL)とかで実はあんまりうまくないので、以下の独自バリデーションで上書きしちゃうことをおすすめします。
さっきまでドはまりしていたので自戒も兼ねて。

独自バリデーション

ただのクラスなのでどこにでも置けます。個人的にはapp/class/validate/の下に置くのが好き。

extension.php

class Validate_Extension {
	// メソッド名に注意
	// _validation_hoge

	public static function _validation_hoge($val){
        Validation::active()->set_message('hoge', 'ほげチェックエラー');
		// 正規表現やデータベースアクセスなどによる操作が可能
       // trueが正常系(書式との一致)。
		return $bool;
	}
	
}

独自バリデーションの読み込み

// バリデーションクラスをインスタンス化
$val = Validation::instance();
// 拡張バリデーションクラスを呼び出し
$val->add_callable('Validate_Extension');

// ルールとして利用可能に
$val->add('email', 'メールアドレス')
    ->add_rule('required')
    ->add_rule('valid_email')
    ->add_rule('hoge');

// 何も引数を指定しなかった場合、デフォルトで$_POSTが引き渡される
if($val->run()){
	// バリデーション成功の場合ここに入ってくる
}else{
	// バリデーション失敗の場合ここに入ってくる
	foreach($val->error as $key=>$value){
		// $key:'email'
		// $value:エラー
		// $value->get_message():エラーメッセージ
	}
}

ところでバリデーション処理ってどこに書くのが正しいのでしょう。
ControllerなのかPresenterなのかModelなのか…。

37
37
5

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
37
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?