質問: 3カ所inputのあるフォームをPOSTした際、 その3つともに同じcallbackを指定しているのですが そのcallback function内でどのPOSTかを見分ける方法ってありますか? 例えば、 ``` public function hoge() { $this->form_validation->set_rules("hoge1", "ホゲ1", "callback__validate_hoge"); $this->form_validation->set_rules("hoge2", "ホゲ2", "callback__validate_hoge"); $this->form_validation->set_rules("hoge3", "ホゲ3", "callback__validate_hoge"); if($this->form_validation->run()){ //処理 } else //処理 } function _validate_hoge() { echo "This is ".$whichhoge; } ``` こうあるとき、$whichhogeにhoge1と入れたりする方法ってありませんか? また、このようにruleに独自コールバックしかないような場合は$this->input->post();で取ってきて 中身をループさせて処理させたほうが良いと思いますか? よろしくおねがいします。 追記: 自己解決しましたが、最後の質問は引き続きお聞きしたいです。 form_validationを使う利点として何かあるかな、と。 思いつくのはルールを増やしたいときくらいですが、既に用意されているルールも限りがありますし、どうなんでしょうか。 解決策は ``` public function hoge() { $this->form_validation->set_rules("hoge1", "ホゲ1", "callback__validate_hoge[hoge1]"); $this->form_validation->set_rules("hoge2", "ホゲ2", "callback__validate_hoge[hoge2]"); $this->form_validation->set_rules("hoge3", "ホゲ3", "callback__validate_hoge[hoge3]"); if($this->form_validation->run()){ //処理 } else //処理 } function _validate_hoge($value, $whichhoge) { return $value." is ".$whichhoge; //ex.) ホゲ1 is hoge1 } ``` echoはおかしかったですね。
回答: 他のフレームワークでもよく見かける形ですが、CodeIgniter の form_validation は「汎用的な細かいルールを組み合わせて各入力値を検証・フィルタする」というものです。 * ルールが細分化されている * ルールはどのフィールドで使われるかを気にせず、入力値の処理のみを行う * ルールの組み合わせが簡単に行える という特徴から、ルールの再利用性や、組み合わせた場合のわかりやすさが期待できます。 一方、「ruleに独自コールバックしかない」ということは、前述の思想とは逆に、フィールド・フォームごとにひとかたまりのロジックを設けて検証・フィルタする、という設計になっているのでしょう。 是非はともかく、その場合は無理に form_validation を使わなくてもいいかなと思います。 ``` function _validate_hoge($value, $whichhoge) { return $value." is ".$whichhoge; //ex.) ホゲ1 is hoge1 } ``` この処理がバリデーションやフィルタなのかは疑問ですが・・・。