2016-10-23 16 views
0

私はcodeigniter 3.1.1を使用しています。私はcodeigniterを初めて使用しています。問題を抱えてしまいました。私のコールバック関数は、フィールドが空であっても必要なルールがスキップされ、コールバック関数が実行されるように見えるという点で、必要な検証に影響するようです。ここで必要な検証に影響を与えるコードネーターコールバック

$validate_data = array(

     array(

      'field' => 'pages', 
      'label' => 'No of pages', 
      'rules' => 'trim|required|integer|callback_regex_pages' 
      ) 
); 

    $this->form_validation->set_rules($validate_data); 
    $this->form_validation->set_error_delimiters('<p class="text-danger">','</p>'); 

私のコールバック関数

public function regex_pages(){ 

if(!preg_match('/^\d(\d)?(\d)?$/',$this->input->post('pages'))){ 

    $this->form_validation->set_message('regex_pages', 'The {field} is not valid!'); 

    return false; 

    }else{ 

    return true; 

    } 
    }//end method regex_pages 

私のコードです。これは、このように振る舞う私の多くのコールバックのひとつです。私は、コールバックのルールを削除する場合は、必要なルールが

を実行されますこれは

My output

+0

私はそれらのいずれかがfalseを返すかどうかを 'ます$ this-> form_validation->実行()'すべてのルールをテストすることを信じて、それ – developer

+0

の入力、ショーのサンプルは何ですか。つまり、必要なルールがfalseを返しても、regex_pagesが呼び出されるのを止めることはありません。 – DFriend

答えて

0

以下の私の出力である私は、あなたがする「MY_form_validation」と呼ばれる新しいライブラリを作ることによって、あなたのフォーム検証ライブラリを拡張することをお勧め"CI_form_validation"を拡張して "libraries"フォルダに保存します。その後、すべてのコールバック関数をMY_form_validationに入れて、グローバルにコールバックを使用できるようにしますが、接頭辞「コールバック」を使用してルールを設定する必要はありません。 ここに例を示します。

$validate_data = array(

    array(

     'field' => 'pages', 
     'label' => 'No of pages', 
     'rules' => 'trim|required|integer|regex_pages' 
     ) 

);

$this->form_validation->set_rules($validate_data); 
$this->form_validation->set_error_delimiters('<p class="text-danger">','</p>'); 

のでMY_form_validationであなたは、関数、フィールドの値が有効であるかどうかのメッセージに関係なく設定し

public function regex_pages($value_to_be_validated){ 

if(!preg_match('/^\d(\d)?(\d)?$/',$value_to_be_validated)){ 

$this->set_message('regex_pages', 'The {field} is not valid!'); 

return false; 

}else{ 

return true; 

} 
+0

これは解決策ではあるようですが、モデルクラスを読み込めず、 '$ this-> db'を使うことができないため、電子メールアドレスが存在するかどうかのチェックなど、データベースへのアクセスが必要な規則を形成しません。 – facilitator

+0

ああ、 – facilitator

+0

get_instance();関数を呼び出すことで、データベースなどをロードすることができます。だから、$ CI = get_instance(); $ CI-> load-> database()でデータベースを呼び出します。モデルをロードする場合は、単純に次のように入力します。$ CI-> load-> model( 'your_name_model');この後、$ CI-> your_model_name-> your_method();と入力してモデルを呼び出すことができます。 – Dumitru

1

ようになります。

public function regex_pages($value){ 

    //set message anyway 
    $this->form_validation->set_message('regex_pages', 'The {field} is not valid!'); 

    //the rule will be available for any field, not just for pages 
    return (bool) preg_match('/^\d(\d)?(\d)?$/',$value); 

} 

また、Codeigniter regex_matchルールを使用することもできます。 http://www.codeigniter.com/user_guide/libraries/form_validation.html?highlight=form%20validation#CI_Form_validation

'rules' => 'trim|required|integer|regex_match[//]' 
+0

何かを返す(trueまたはfalse)と動作します。 – Ali

関連する問題