第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データを取得してチェックが可能ですが、
その後のエラーメッセージの表示などを考えると他のバリデーションチェックと
同じようにできるのは便利ですし、可読性・保守性が向上するのではないかと思います。
知らねばほっとけではいけませんね。
CodeIgniter , PHP
0 件のコメント:
コメントを投稿