WEBエンジニアGirls!!

今までプログラミングに触れたことがなかった女子たちが、就職・インターンを機にイケてるWEBエンジニアを目指す七転び八起きをゆるーり綴ります( ´ω`)

Codeigniterのバリデーションをカスタマイズする!/PHP

こんにちは、WEBエンジニアのあじゃです(θωθ っ )3~

私のチームでは、PHPフレームワークによくCodeigniterを使っています。



普段「こーどいぐないたー」と呼んでいるのですが、
他社エンジニアの人たちが「こーどいぐにたー」と呼んでました。
どっちが正しいんだろう・・・


Codeigniterには、数行の記述でバリデーションができちゃうようなform validationクラスがあります!
便利ーっ٩( 'ω' )و

基本の使い方は、公式チュートリアルがわかりやすいです
フォームバリデーション(検証) : CodeIgniter ユーザガイド 日本語版


使用可能なルールのバリエーションもなかなか多く、
「入力必須」「最大文字数」など基本的なものならほとんど揃っています。
しかも、こんな風に連結することで複数設定もOK!(これは入力必須 かつ 最大5文字となります)

$this->form_validation->set_rules('name', 'なまえだよ', 'required|max_length[5]');

だけど使っていると、
「えー半角英数だけじゃなくて、半角英数記号のバリデーションしたいんだよねー」って感じで
カスタマイズしたくなる時がありますよね!!


既存の同じような書き方で上手くできないかな・・・

$this->form_validation->set_rules('hoge', 'hogejogehuga', 'required|max_length[5]|alpha_numeric_symbol');

こんな感じ。


こんなときは、callback関数を使えば良い!!
ということでした٩( 'ω' )و

このやりかた、いろいろググっていたのですが公式に載っていました・・・
フォームバリデーション(検証) : CodeIgniter ユーザガイド 日本語版


callback関数の実装はこんな感じです。
新しいメソッドをコントローラーに作成します。

// _をfunction名の頭につけることで、ブラウザから直接アクセスできないfunctionにしておく
public function _alpha_numeric_symbol($hoge){
    // 半角英数記号かどうか?という判断のコードを書く。
    // 結果を$resultとする。エラーの時は$result = FALSE, OKの時は$result = TRUEになってるとすると、

    if($result){
        // OKなのでなにもしない
        return TRUE;
    }else{
        // エラー!!
        // カスタマイズしたルールに合わせて、エラーメッセージを設定する
        $this->form_validation->set_message('_alpha_numeric_symbol', '%s [' . $hoge . ']は半角英数記号で入力してねっ');
        return FALSE;
    }
}

これを、バリデーションをかけたいところで他の既存ルールと同じように呼び出すだけ!

$this->form_validation->set_rules('hoge', 'hogejogehuga', 'required|max_length[5]|callback__alpha_numeric_symbol');

callback_というprefixは、callbackを呼び出すCodeigniterの書き方です

らくちん・・・!!


フレームワークも本当に奥が深いですね。


あじゃ(θωθ っ )3~