Я проверил документацию на кодеригере, но нет специальной страницы или информации об этом. Все, что я хочу знать, это то, как он работает. У меня есть этот код, и он работает !, Что мне интересно, как is_unique работает, когда нет доступа к какой-либо модели или базе данных. Есть ли какой-либо класс в 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;
}
Исходный код этой функции можно найти по адресу: system/libraries/Form_validation.php
который, как представляется, является единственным экземпляром is_unique
вызывается из системных классов.
Код:
/**
* 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-документы
sscanf() выполняется для ветки базы данных от имени таблицы.
Затем функция проверяет, существует ли соединение с базой данных, выбирает таблицу, указанную в аргументе, и ищет таблицу для возврата, существует ли эта запись. Использование тернарных операторов (? :) с синтаксисом boolean expression? if true: if false;
boolean expression? if true: if false;
Надеюсь, это поможет!