20022


3カ所inputのあるフォームをPOSTした際、  
その3つともに同じcallbackを指定しているのですが  
そのcallback function内でどのPOSTかを見分ける方法ってありますか？

例えば、

[code]

    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;
    }
    
[/code]

こうあるとき、$whichhogeにhoge1と入れたりする方法ってありませんか？  
また、このようにruleに独自コールバックしかないような場合は$this->input->post();で取ってきて  
中身をループさせて処理させたほうが良いと思いますか？  
よろしくおねがいします。

追記：  
自己解決しましたが、最後の質問は引き続きお聞きしたいです。  
form_validationを使う利点として何かあるかな、と。  
思いつくのはルールを増やしたいときくらいですが、既に用意されているルールも限りがありますし、どうなんでしょうか。

解決策は

[code]

    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
    }
    
[/code]

echoはおかしかったですね。


CC BY-SA 3.0
2015-12-15T07:46:54.743
20016
2015-12-15T09:23:55.737
2015-12-15T08:14:05.913
13679
13679
question
php codeigniter
Codeigniter3.0のForm Validationで複数のルールに同じcallbackを指定している場合


他のフレームワークでもよく見かける形ですが、CodeIgniter の form_validation
は「汎用的な細かいルールを組み合わせて各入力値を検証・フィルタする」というものです。

  * ルールが細分化されている
  * ルールはどのフィールドで使われるかを気にせず、入力値の処理のみを行う
  * ルールの組み合わせが簡単に行える

という特徴から、ルールの再利用性や、組み合わせた場合のわかりやすさが期待できます。

一方、「ruleに独自コールバックしかない」ということは、前述の思想とは逆に、フィールド・フォームごとにひとかたまりのロジックを設けて検証・フィルタする、という設計になっているのでしょう。

是非はともかく、その場合は無理に form_validation を使わなくてもいいかなと思います。

[code]

    function _validate_hoge($value, $whichhoge)
    {
        return $value." is ".$whichhoge; //ex.) ホゲ1 is hoge1
    }
    
[/code]

この処理がバリデーションやフィルタなのかは疑問ですが・・・。


CC BY-SA 3.0
2015-12-15T09:23:55.737
20022
2015-12-15T09:23:55.737
8000
20016
answer