初心者にもわかるCodeIgniter 其の五【フォームバリデーション】

2017年4月19日 16:13
今回はユーザー登録とログイン機能を予定していましたが、準備編としてフォームバリデーションをやります。
この記事は最終更新日から1年以上が経過しています。

フォームを使うにあたり、どうしても必要になるフォームバリデーション。
Jqueryプラグインを利用するのもいいですが、複雑な判別を考えるとCodeIgniter独自のものを利用するのが吉です。
これはそれほど難しくないので、簡単に説明していきます。

送信フォームを作る

まず、バリデーションなしでフォームを作りましょう。

application/views/index.php にフォームを追加

<form class="form-horizontal" method="POST" action="/post/regist/">
	<fieldset>
	<legend>登録フォーム</legend>
		<div class="form-group">
			<label for="inputEmail" class="col-lg-2 control-label">Nmae</label>
			<div class="col-lg-10">
				<input class="form-control" name="name" id="inputName" placeholder="Name" type="text">
			</div>
		</div>
		<div class="form-group">
			<label for="inputEmail" class="col-lg-2 control-label">Email</label>
			<div class="col-lg-10">
				<input class="form-control" name="mail" id="inputEmail" placeholder="Email" type="text">
			</div>
		</div>
		<div class="form-group">
			<label for="inputEmail" class="col-lg-2 control-label">Password</label>
			<div class="col-lg-10">
				<input class="form-control" name="password" id="inputPassword" placeholder="Password" type="password">
			</div>
		</div>
		
		<div class="form-group">
			<div class="col-lg-10 col-lg-offset-2">
				<button type="submit" class="btn btn-primary">送信</button>
			</div>
		</div>
	</fieldset>
</form>

次に送信先のコントローラーを設定。
我流ですが、自分はPOST先専用のコントローラーを用意するようにしています。
application/controllers/Post.php を作成

<?php
class Post extends FRONT_Controller {
	public function __construct(){
		parent::__construct();
	}

	//regist
	public function regist(){
		if($this->input->post()){
			
			if ($this->form_validation->run('vali_regist') == FALSE){
				echo validation_errors();
			}else{
				'成功'
			}
			exit;
		}
	}
}

POST先でコントローラーが利くように調整します。
application/config/routes.php に以下を追加

$route['post/(:any)'] = 'post/$1';

form_validationの設定

下準備ができたら以下のページに目を通してください。
フォームバリデーション(検証) — CodeIgniter 3.2.0-dev ドキュメント

基礎的なことは説明しないので、準備するファイルを記述していきます。

application/config/form_validation.php を作成

<?php $config = array( 
$config = array(
	//ユーザー登録
	'regist' => array(
		array(
		   'field' => 'name',
		   'label' => 'Name',
		   'rules' => 'required',
		),
		array(
		   'field' => 'mail',
		   'label' => 'Mail',
		   'rules' => 'regist_mail|required|valid_email',
		),
		array(
		   'field' => 'password',
		   'label' => 'Password',
		   'rules' => 'required',
		),
	),
);
?>

自作ルールを作成します。
今回のフォームはログインID(メールアドレス)の重複を許さないので、その為のルールが必要になります。
application/libraries/MY_Form_validation.php を作成

<?php if ( ! defined('BASEPATH')) exit('No direct scriptaccessallowed');
	class MY_Form_validation extends CI_Form_validation {

	function MY_validation(){
		parent::CI_validation();
	}

	//ユーザー登録時のアドレス重複チェック
	function regist_mail($str) {
		$this->set_message('regist_mail', 'そのメールアドレスは既に利用されています');
		$user = $this->CI->All->getRow('user', array('mail'=>$str));

		if ($user){
			return FALSE;
		}
		return TRUE;
	}
}

以上でフォームバリデーションが動作します。ざっくりですが、こういう事です。

CodeIgniter 日本語化言語ファイル

CodeIgniterでは、フォームバリデーションに限らず、日本語化してほしい箇所が複数あります。
そんな時には日本語化ファイルをアップロードしてしまいましょう。

ダウンロードは以下
GitHub – bcit-ci/codeigniter3-translations

ダウンロードして解凍すると、
codeigniter3-translations-develop > language > japaneseというファイル構成。
japaneseapplication/language/ にアップロード。

その後、configを調整。
application/config/config.php を編集

$config['language']	= 'japanese';

以上。
バリデーションのエラーを出して、日本語化しているか確認しましょう。

次回にはログイン等をと考えていましたが、それよりも先にAjax通信をやろうと思います。
これも簡単なので、ざっくりと説明できたらと思います。

参考ページ:http://sample.xn--pbku02iq0izkz.net/

ブログ運営

株式会社ちょもらんま

https://qomolangma.jp