CodeIgniterでバリデーションルールを外部ファイルにまとめる方法

CodeIgniter
スポンサーリンク

私はプログラムになれていないので、重複してコードを書いてしまう事が多々あります。そんな時に、少しでも外部ファイルへ設定情報的にまとめることができると、情報が一箇所に集中して、訂正する時も便利ですよね。
今回は、CodeIgniterのバリデーションルールを外部ファイルにまとめる方法をメモしておきます。

確認環境

  • CodeIgniter2.1.3(英語版)

ファイル置き場とルール

  • form_validation.phpというファイル名でapplication/config/に作成します。
  • バリデーション設定は、$configという変数名にすること。
  • バリデーション設定は、例えば「ユーザーログイン用」「投稿用」といった具合に場合分けができるので便利。

コード例

上記の「ユーザーログイン用(user)」「投稿用(post)」を例にして、設定コードを書いてみます。

application/config/form_validation.php

<?php
//変数名は必ず$configで
$config = array(
    'user' => array(    //例)ユーザー認証用バリデーションルール
        array(
            'field' => 'name',
            'label' => 'お名前',
            'rules' => 'required|max_length[128]',
        ),
        array(
            'field' => 'email',
            'label' => 'メールアドレス',
            'rules' => 'valid_email|max_length[255]',
        ),
    ),
    'post' => array(    //例)投稿用バリデーションルール
        array(
            'field' => 'title',
            'label' => 'タイトル',
            'rules' => 'required|max_length[128]',
        ),
        array(
            'field' => 'comment',
            'label' => 'コメント',
            'rules' => 'required|xss_clean',
        ),
    ),
);

上記のように、場合分けをしたルールを作成できるので便利ですね。なお、fieldの値は、htmlフォーム側のname値と揃える必要があります。

呼び出し方法

いろいろな方法があるようですが、その中で私がやっている方法を書いておきます。

まず、autoload.phpの該当行にバリデーションライブラリの読み込みを記述します。

//バリデーションライブラリの読み込み
$autoload['libraries'] = array('form_validation');

次に、使用したいコントローラーの箇所で、例えば以下のように記述します。

if($this->form_validation->run('post') == FALSE)
{
    //エラーの場合の処理
}else{
    //問題ない場合の処理
}

run(‘post’)のpost部分が、バリデーション設定で指定した名前に当たります。