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.

Если я просто сделаю:

 $this->form_validation->set_rules('url', 'url', 'trim|xss_clean|callback_url_check'); 

И вызовите url_check($str) все работает так, как должно быть.

Вопрос в том, как передать два значения url_check($str, $id) ?

Вы можете напрямую использовать $ 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.

  • Изменение поведения отступа Vim по типу файла
  • Как передать параметры другому процессу в c #
  • Что такое ссылка на указатель?
  • Могу ли я передать аргумент VBScript (файл vbs, запущенный cscript)?
  • Как я могу вызвать New-Object для конструктора, который принимает один параметр массива?
  • Как написать сценарий bash, который принимает необязательные входные аргументы?
  • Как получить параметр URL в Express?
  • Указатели как аргументы функции в C
  • Как назначить «ссылку» на поле classа в c #?
  • Как проверить, указан ли аргумент метода директивы в AngularJS?
  • Давайте будем гением компьютера.