Codeigniter передает 2 аргумента для обратного вызова
После публикации формы с двумя полями с именем «id» и «url» у меня есть следующий код:
$this->load->library('form_validation'); $this->form_validation->set_rules('id', 'id', 'trim|xss_clean'); $this->form_validation->set_rules('url', 'url|id', 'trim|xss_clean|callback_url_check');
Для запроса db нужны оба поля.
Вызывается функция url_check ($ str, $ id), но в этом случае «id» всегда имеет значение 0.
- Как получить имена параметров конструкторов объекта (reflection)?
- Порядок оценки параметров перед вызовом функции в C
- Как передать аргумент в Makefile из командной строки?
- Как я могу вызвать New-Object для конструктора, который принимает один параметр массива?
- Изменение поведения отступа Vim по типу файла
Если я просто сделаю:
$this->form_validation->set_rules('url', 'url', 'trim|xss_clean|callback_url_check');
И вызовите url_check($str)
все работает так, как должно быть.
Вопрос в том, как передать два значения url_check($str, $id)
?
- Передайте параметр EventHandler
- Параметр, проходящий в C - указатели, адреса, псевдонимы
- Как назначить «ссылку» на поле classа в c #?
- Получение набора параметров набора в Java
- Как проверить, указан ли аргумент метода директивы в AngularJS?
- Возможны ли параметры в strings.xml?
- Что такое ссылка на указатель?
- Указатели как аргументы функции в C
Вы можете напрямую использовать $ this-> input-> post:
function check_url() { $url = $this->input->post('url'); $id = $this->input->post('id'); // do some database things you need to do eg if ($url_check = $this->user_model->check_url($url, $id) { return TRUE; } $this->form_validation->set_message('Url check is invalid'); return FALSE; }
Просто делайте это правильно (по крайней мере, для CI 2.1+), как описано в документах :
$this->form_validation->set_rules('uri', 'URI', 'callback_check_uri['.$this->input->post('id').']'); // Later: function check_uri($field, $id){ // your callback code here }
Это, похоже, тоже работает.
$id = 1; $this->form_validation->set_rules('username', 'Human Username', 'callback_username_check['.$id.']'); function username_check($str, $id) { echo $id; if ($str == 'test') { $this->form_validation->set_message('username_check', 'The %s field can not be the word "test"'); return FALSE; } else { return TRUE; } }
Если я правильно понимаю form_validation, каждое правило (set_rules) относится к одному полю формы, и ваш обратный вызов будет проверять только одно поле. В вашем случае кажется, что «id» выходит за frameworks. Вместо этого можно передать массив функции set_rules и выполнить обратный вызов. Я еще не пробовал. http://codeigniter.com/user_guide/libraries/form_validation.html#validationrulesasarray
Просто обратите внимание на использование параметров обратного вызова, как это предлагается в других ответах. Если вы используете app/config/form_validation.php
для создания своих правил проверки, синтаксис $this->input->post('parameter')
не будет работать, поскольку этот объект недоступен в загрузчике CI в точке в когда он считывает содержимое этого файла. Вам необходимо будет выполнить вызов в вашей процедуре обратного вызова, например:
public function _validate_user_signup($username, $password) { $var = $this->input->post('password');
В этом случае второй параметр, переданный методу, не будет содержать пароль, но после вызова будет $ var.
Надеюсь, это ясно. Matt
Для получения данных, которые проверяются, лучше использовать библиотеку проверки формы.
Не всегда ваши данные будут в $ _GET или $ _POST (см. https://www.codeigniter.com/userguide3/libraries/form_validation.html#validating-an-array-other-than-post ).
Лучший способ доступа к данным в обратном вызове проверки – это:
$this->form_validation->validation_data
«validation_data» является общедоступным в classе CI_Form_validation.