Проверка CodeIgniter переменных / ввода не из формы? - PullRequest
2 голосов
/ 02 апреля 2012

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

например.

<?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

?>

Ответы [ 3 ]

3 голосов
/ 16 сентября 2015

Да, вы можете с помощью 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';
}
1 голос
/ 05 апреля 2012

Вы можете расширить метод 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() ;
     }

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

0 голосов
/ 02 апреля 2012

Может показаться грязным хаком, но вы могли бы подделать сообщение формы, установив данные $ _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(), matches())
  • Заменить все экземпляры $_POST в MY_Form_validation.php на $this->validate_data
  • Установите $validate_data в $_POST в конструкторе.
  • Добавить функцию set_validate_data(), которая позволяет перезаписывать $this->validate_data

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...