Допустим, у меня есть пользовательские данные, которые не проходят через сообщение формы. Есть ли способ, которым я могу использовать / расширить класс 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 ?>
Да, вы можете с помощью 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. Как я это сделаю:
$_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.