2015-10-12 59 views
1

我已檢查codeigniter的文件,但沒有特殊的頁面或關於它的信息。我想知道的是它是如何工作的。我有這個代碼,它的工作!,我想知道如何is_unique工作時,沒有任何模型或數據庫訪問。 is_unique是否有任何codeigniter中的類使用它來根據信息(如表名和字段)檢索數據? ,這就是代碼:如何codeigniter的is_unique []工作

echo form_input('email_address', set_value('email_address'), 'placeholder="Email"'); 

而且控制器:在視圖

電子郵件輸入

function create_member() 
    { 
     $this->load->library('form_validation'); 

     // field name, error message, validation rules 
     $this->form_validation->set_rules('email_address', 'Email Address', 'trim|required|valid_email|is_unique[membership.email]'); 
     $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]'); 
     $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]'); 
     $this->form_validation->set_rules('password2', 'Password Confirmation', 'trim|required|matches[password]'); 

     $this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>'); 

     if($this->form_validation->run() == FALSE) 
     { 
      $this->load->view('pages/signup_form'); 
     } 

     else 
     {   
      $this->load->model('admin/Users_model'); 

      if($query = $this->Users_model->create_member()) 
      { 
       $this->load->view('pages/signup_successful');   
      } 
      else 
      { 
       $this->load->view('pages/signup_form');   
      } 
     } 

    } 

和她的模型:

function create_member() 
    { 

      $new_member_insert_data = array(
       'email' => $this->input->post('email_address'),   
       'user_name' => $this->input->post('username'), 
       'pass_word' => md5($this->input->post('password'))      
      ); 
      $insert = $this->db->insert('membership', $new_member_insert_data); 
      return $insert; 

    } 

回答

3

您可以找到此功能的源代碼位於:system/libraries/Form_validation.php,它似乎是唯一的實例從系統類調用。

代碼:

/** 
    * Is Unique 
    * 
    * Check if the input value doesn't already exist 
    * in the specified database field. 
    * 
    * @param string $str 
    * @param string $field 
    * @return bool 
    */ 
    public function is_unique($str, $field) 
    { 
     sscanf($field, '%[^.].%[^.]', $table, $field); 
     return isset($this->CI->db) 
      ? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0) 
      : FALSE; 
    } 

「功能的sscanf()是printf()的的輸入的模擬的sscanf()從字符串str讀取並根據指定的格式,這是在所描述的將其解釋sprintf()的文檔。「 - PHP Docs

sscanf()正在運行以將數據庫從表名中分離出來。

然後,函數檢查數據庫連接是否存在,選擇參數中提供的表,並搜索表返回是否存在該條目。使用三元運算符(?:)的語法爲boolean expression ? if true : if false;

希望對您有所幫助!