CodeIgnitor валидация переменных / входных данных, не входящих в форму?

Допустим, у меня есть пользовательские данные, которые не проходят через сообщение формы. Есть ли способ, которым я могу использовать / расширить класс CodeIgnitors form_validation для проверки этих данных.

например.

<?php $userData = array('name' => 'tt' , 'city' => 'London' , 'age' => '1200' ); // How can I validate this data using form_validation checks // like min_length,max_length,and apply some processing // like trim,xss_clean provided by the same class ?> 

Solutions Collecting From Web of "CodeIgnitor валидация переменных / входных данных, не входящих в форму?"

Да, вы можете с помощью set_data() , вот и все.

 $this->form_validation->set_data(array( 'name' => 'Full Name', 'city' => 'City', )); $this->form_validation->set_rules('name', 'Name', 'trim|required'); $this->form_validation->set_rules('city', 'City', 'trim|required'); $this->form_validation->set_rules('age', 'Age', 'trim|required'); if ($this->form_validation->run() == FALSE) { echo 'Invalid: ' . validation_errors(); } else { echo 'Valid'; } 

Вы можете расширить метод run и set_rule основной формы проверки достоверности codeigniter. Это как я делаю это без расширения ядра:

  // Data coming from backbone model $data = json_decode(file_get_contents('php://input'), true); $this->config->load('myValidConf/form_validation'); $non_post = array( 'foo' => $data['foo'] ); $_POST = $non_post; if ($this->form_validation->run('myConfigarray')!== FALSE) { echo 'we're ok'; } else { echo validation_errors() ; } 

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

Может звучать как грязный хак, но вы можете подделать сообщение формы, установив данные $ _POST? Скажем, вы получаете JSON, вы можете сделать что-то вроде:

 $json = "...."; //json encoded string $arr = json_decode($json, true); foreach($arr as $key => $value) { $_POST[$key] => $value; } // do form validation as if the data was posted from a form. 

Это минус просто быстро. Вы можете продлить / перезаписать части библиотеки Form_validation. Как я это сделаю:

  • Добавьте библиотеку MY_Form_validation.php, скопируйте в нее ВСЕ функции из Form_validation.php, которые используют $_POST ( set_rules() , run() , set_rules() matches() )
  • Замените все экземпляры $_POST в MY_Form_validation.php с помощью $this->validate_data
  • Установите $validate_data в $_POST в конструкторе.
  • Добавьте функцию set_validate_data() которая позволяет вам перезаписать $this->validate_data

Вам нужно будет использовать массив $ _POST после того, как данные будут проверены, если вы хотите использовать очищенные данные. Если это неприемлемо, добавьте функцию, которая очистит $ this-> validate_data и вернет чистый массив XSS.