Справочная информация Использование Codeigniter
с form_helper
и form_validation
для обработки некоторой формы. Форма успешно прошла проверку в controller
.
Теперь нам нужно поместить эти данные в базу данных, используя класс model
.
Предположения
Предположим, что наша форма имеет несколько входных элементов (например,> 20).
Вопрос: Какой из следующих фрагментов кода будет более эффективным? Both snippets are obviously inside the controller method to which the form submits data.
Фрагмент кода 1
if ($this->form_validation->run()) { // validation successful, now collect the values in a variable to pass it to the model. $form_data['field1'] = $this->form_validation->set_value('field1'); $form_data['field2'] = $this->form_validation->set_value('field2'); // AND SO ON $form_data['fieldN'] = $this->form_validation->set_value('fieldN'); // Now put this data into database. $this->corresponding_model->write_to_db($form_data); }
Фрагмент кода 2
if ($this->form_validation->run()) { // validation successful, now collect the values in a variable to pass it to the model. $form_data['field1'] = $this->input->post('field1'); $form_data['field2'] = $this->input->post('field2'); // AND SO ON $form_data['fieldN'] = $this->input->post('fieldN'); // Now put this data into database. $this->corresponding_model->write_to_db($form_data); }
Поэтому, по сути, я задаю вопрос: что лучше получить данные сообщения для какого-либо произвольного элемента формы? $this->input->post
или $this->form_validation->set_value()
?
PS: Если мы посмотрим на функции set_value()
и post()
в коде (см. Ниже), очевидно, что set_value()
будет быстрее, поскольку post()
проходить через весь $_POST
. Так что в некотором смысле это также о том, что такое лучшая практика?
Метод Form_validation.php, set_value ()
public function set_value($field = '', $default = '') { if ( ! isset($this->_field_data[$field])) { return $default; } // If the data is an array output them one at a time. // Eg: form_input('name[]', set_value('name[]'); if (is_array($this->_field_data[$field]['postdata'])) { return array_shift($this->_field_data[$field]['postdata']); } return $this->_field_data[$field]['postdata']; }
Метод Input.php, post ()
function post($index = NULL, $xss_clean = FALSE) { // Check if a field has been provided if ($index === NULL AND ! empty($_POST)) { $post = array(); // Loop through the full _POST array and return it foreach (array_keys($_POST) as $key) { $post[$key] = $this->_fetch_from_array($_POST, $key, $xss_clean); } return $post; } return $this->_fetch_from_array($_POST, $index, $xss_clean); }