Codeigniter3.0のForm Validationで複数のルールに同じcallbackを指定している場合

投稿者: Anonymous

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
}

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

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *