狛ログ

2016年9月11日日曜日

知らねばほっとけとはいかない Codeigniter3 独自 バリデーション チェック に 引数 を渡す



オフィス狛 技術部です。

第1回(小石につまずくとけっこう痛い Codeigniter3 ファイル命名規約)、
第2回(小石につまずくとけっこう痛い Codeigniter3 複数ファイル同時アップロード)、
第3回(小石につまずくとけっこう痛い Codeigniter3 csrf_token の 有効期限切れ エラー をキャッチ)に引き続き、

今回も PHP ( Codeigniter3 )で地味につまずいたことと書こうと思っております。
今回は、
『 独自のバリデーションチェック に引数を渡す 』
です。

独自バリデーションチェックの作成方法は本家サイトにお任せします。
Form Validation — CodeIgniter 3.1.0 documentation callbacks-your-own-validation-methods

ちなみに
 $this->form_validation->set_rules() に設定する際に
メソッドの先頭に「 callback_ 」を付けなければいけないというルールを知らずに
ちょっとつまってしまった経験があるので、一応記載しておきます。
チェックメソッドが
username_check()
ならば、
$this->form_validation->set_rules('username', 'Username', 'callback_username_check');
と書く必要があるということですね。

では、このチェックメソッドにどうやって引数を渡すのか?

調べた結果、2つ方法があるようです。
1.  $this->input->post() で取得する
$this->form_validation->set_rules('uri', 'URI', 'callback_check_uri');
function check_uri(){
 $this->input->post('url');
 $this->input->post('id');
}

2. $this->form_validation->set_rules()の中に書く
$this->form_validation->set_rules('uri', 'URI', 'callback_check_uri['.$this->input->post('id').']');
function check_uri($field, $id){
 // $fieldにはバリデーション対象のPOSTデータが自動で入ります。
}
※CI2.1以上であることが条件だそうです。

個人的には
文字列結合して引数を渡しているのが
どうしても無理やりな感じがしているので
1の方がいいなと思うのですが
公式ドキュメントでは2の方法が書かれています。

1の場合ですと、引数が増えても楽に対応出来そうですよね。

ちなみに2のような形式で行う場合は、

$this->form_validation->set_rules('uri','URI','callback_check_uri[id,method]');
function check_picture($image,$param){
 $param = preg_split('/,/', $param);
 $id = $param[0];
 $method = $param[1];
}
と書けば上手くいくようです。
※公式ではないようですが。。。

チェック自体は単純にPOSTデータを取得してチェックが可能ですが、
その後のエラーメッセージの表示などを考えると他のバリデーションチェックと
同じようにできるのは便利ですし、可読性・保守性が向上するのではないかと思います。

知らねばほっとけではいけませんね。

,

0 件のコメント:

コメントを投稿