Help us understand the problem. What is going on with this article?

FuelPHPでバリデーション

More than 5 years have passed since last update.

ちょっと前まで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なのか…。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away