2

フォーム検証ルールを定義するロジックをライブラリに分離しています。1 つのフォーム要素に複数のコールバック関数を適用したいと考えています。

$this->form_validation->set_rules('email', 'email', 'callback_db_check|callback_valid_email');          

今、私はこれを行う方法がわかりません。機能していないため、複数のコールバックが機能していません。しかし、単一のコールバックを定義すると、正常に機能します。

function db_check(){
    $this->CI->form_validation->set_message('db_check', 'Not found in db');
}

function valid_email(){
    $this->CI->form_validation->set_message('db_check', 'Invalid email');
}

これは単なるコード例です。ライブラリから検証ロジックを定義して呼び出すことができるように、フォーム検証ライブラリを拡張しました。どうすればそれを行うことができますか?

4

2 に答える 2

3
$this->CI->form_validation->set_rules('email' , 'Email' , 'required|valid_email|max_length[255]|callback_email|callback_call_db'); 

psコールバックは常にtrueまたはfalseを返す必要があります(例では何も返されません)

于 2012-05-28T06:35:44.380 に答える
3

1 つの要素で複数のコールバック関数を適用できます

検証ルールは、フォーマットを使用して設定できます

$this->form_validation->set_rules('email', 'email', 'callback_db_check|callback_valid_email');

コールバック関数は true または false を返す必要があります。

function db_check($user) 
     {

        $sql=$this->db->query("select * from user where email like '%$user%' ");
        if($sql->num_rows()>0)
        {
             return true;
        }
             else
        {

        $this->form_validation->set_message('db_check', 'Not found in db');
        return FALSE;
        }

     }




 function valid_email($user) 
      {


            if(//condition)
            {
                 return true;
            }
                      else
            {

            $this->form_validation->set_message('valid_email', 'In valid email');
            return FALSE;
            }

      }

ユーザー側で

<div class="field_main">
<div class="fi_title">E-Mail Address *:</div>
<input type="text" id="email" name="email"  value="<? echo set_value('email');?>" class="field_class" />
<? echo form_error('email','<div class="error">', '</div>');?>
</div>
于 2012-05-28T06:59:10.133 に答える