こんにちは、ひろゆきです。
今日は、Codeigniterで独自のバリデーションを作成した際のメモ書きを残したいと思います。
Codeigniterで独自のバリデーションを作成する方法
Codeigniterはデフォルトである程度簡易的なバリデーション機能をForm_validationクラスにもっていますが、入力された値がDBに登録されているかどうかなど、ちょっと複雑なバリデーションに関しては自作するしかありません。(当たり前ですが……)
普段なら以下のようなコードで、必須チェック、数字チェック、長さチェックなどを行いますが、ここでさらに、test_idがDBに登録されている値かどうかをチェックしたい場合があります。
$this->form_validation->set_rules('test_id', 'テストID', 'required|numeric|max_length[9]');
※trimなどは今回は省略しています。
そんなときは以下のようなコールバック関数の実装を行います。
public function _check_test_id($test_id)
{
// testsモデルのロード
$this->load->model('tests');
// カウントを取得するモデル呼び出し
$count = $this->tests->count_test_id($test_id);
if ($count) {
// DBに登録済みの為バリデーションOK
return TRUE;
}
// DBに登録されていない為バリデーションNG
$this->form_validation->set_message('_check_test_id', '%s [' . $test_id . ']はデータベースに未登録です。');
return FALSE;
}
関数名の先頭に「_(アンダーバー)」を付けることにより、ブラウザからの直接アクセスが行えない関数になります。
また、set_messageによって、バリデーションエラーが発生した際に独自のメッセージを返すことが可能となっています。
後は呼び出し元に以下を記述することによって、普段のバリデーションプラス、独自のバリデーションチェックを追加することが可能です。
$this->form_validation->set_rules('test_id', 'テストID', 'required|numeric|max_length[9]|callback__check_test_id');
コールバック関数の内容は何でも書けるので、かけたいバリデーション処理を自由に書くことができます。
まとめ
いかがでしたでしょうか?
便利なフレームワークでも、要求されたこと全てに応えるのは難しいですよね。
そんなときに機能を付けたしやすい仕組みになっている点でも、フレームワークの素晴らしさが実感できますね。
それではまた。
【CodeIgniterシリーズ】
※ Web開発フレームワーク「CodeIgniter」でデバイス別テーマ切り替えを実装する方法
※ Web開発フレームワーク「CodeIgniter」で独自の404ページを作成する方法
※ Web開発フレームワーク「CodeIgniter」でバッチ作成をする方法
※ CodeIgniterでテンプレートを使ってメールを送信する方法
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。