2011-11-18 4 views
18

私は電子メールとパスワードがデータベースの値と一致するかどうかをチェックするログインフォームに機能を持っています。カスタムコード署名規則の作成

この関数がfalseを返す場合、検証エラーを表示したいと思います。

私の問題は、これを作成する方法についてわからないことです。メッセージはパスワードとメールの両方のフィールドに関連しているので、入力フィールドごとにルールを1つだけ表示する必要はありません。

これを達成するためにflashdataを使用しようとしましたが、ページが更新されたときにのみ動作します。

私はどのように機能のためだけに新しい検証規則を作成できますか?$this->members_model->validate_member() ??

$this->form_validation->set_error_delimiters('<div class="error">', '</div>'); 
     $this->form_validation->set_rules('email_address', '"Email address"', 'trim|required|valid_email'); 
     $this->form_validation->set_rules('password', '"Password"', 'trim|required'); 

     if ($this->form_validation->run() == FALSE) 
     { 
      $viewdata['main_content'] = 'members/login'; 
      $this->load->view('includes/template', $viewdata); 
     } 
     else 
     {  
       if($this->members_model->validate_member()) 
       { 

答えて

38

あなたのルールでcallback_を使用し、元のため、callbacksを参照してください。

$this->form_validation->set_rules('email_address', '"Email address"', 'trim|required|valid_email|callback_validate_member'); 

このメソッドをコントローラに追加します。この方法では、検証が

$this->form_validation->set_message('validate_member','Member is not valid!'); 
+2

名前が良くなる、あなたの新しい作成したルールTRUE OR FALSE

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); class MY_Form_validation extends CI_Form_validation { protected $CI; public function __construct() { parent::__construct(); // reference to the CodeIgniter super object $this->CI =& get_instance(); } public function access_code_unique($access_code, $table_name) { $this->CI->form_validation->set_message('access_code_unique', $this->CI->lang->line('access_code_invalid')); $where = array ( 'access_code' => $access_code ); $query = $this->CI->db->limit(1)->get_where($table_name, $where); return $query->num_rows() === 0; } } 

は今、あなたは簡単に追加することができます – Ivan

+0

を返す必要がありますが、上の追加することができます可読性あり、ありがとうございます –

+6

必要はないかもしれませんが、先頭のアンダースコアはメソッドが "/ controller_name/validate_member/blah"を介してアクセスできないようにします...ダブルアンダースコアは完全に受け入れられますIMO "callback__validate_member";) –

5

これはCodeIgniterのフォームバリデーション(検証)ライブラリを拡張して達成する一つの最良の方法を失敗した場合に、あなたはその後、対応するエラーを作成する必要があり

function validate_member($str) 
{ 
    $field_value = $str; //this is redundant, but it's to show you how 
    //the content of the fields gets automatically passed to the method 

    if($this->members_model->validate_member($field_value)) 
    { 
    return TRUE; 
    } 
    else 
    { 
    return FALSE; 
    } 
} 

TRUEまたはFALSEを返す必要があります。データベーステーブル usersaccess_codeフィールドにカスタムバリデーター access_code_uniqueを作成したいとします。

あなたがしなければならないのはという名前のクラスファイルをapplication/librariesディレクトリに作成することだけです。この方法は、それは必要はありません@Ivanいつも..「_validate_member」

$this->form_validation->set_rules('access_code', $this->lang->line('access_code'), 'trim|xss_clean|access_code_unique[users]');