初心者にもわかるCodeIgniter 其の五【フォームバリデーション】
フォームを使うにあたり、どうしても必要になるフォームバリデーション。
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というファイル構成。
japaneseをapplication/language/ にアップロード。
その後、configを調整。
application/config/config.php を編集
$config['language'] = 'japanese';
以上。
バリデーションのエラーを出して、日本語化しているか確認しましょう。
次回にはログイン等をと考えていましたが、それよりも先にAjax通信をやろうと思います。
これも簡単なので、ざっくりと説明できたらと思います。