Web事業部実績紹介
Web事業部実績紹介
2015.05.25

Codeigniterで独自のバリデーションを作成する方法

ひろゆき

こんにちは、ひろゆきです。

今日は、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でテンプレートを使ってメールを送信する方法