Как работает codeigniter is_unique []

1

Я проверил документацию на кодеригере, но нет специальной страницы или информации об этом. Все, что я хочу знать, это то, как он работает. У меня есть этот код, и он работает !, Что мне интересно, как 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;

    }
Теги:
codeigniter

1 ответ

3
Лучший ответ

Исходный код этой функции можно найти по адресу: 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;

Надеюсь, это поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню