Skip to content
Derek Jones edited this page Jul 5, 2012 · 7 revisions

I have a small fix to make validation class more flexible.

... <form> <input type="text" name="search[query]"> </form> ...

In this case validation class is not really helpful as we can declare as a rule just field in the first level array. What if you want to have n level array ?

TO DO:

1. Add just after :

class CI_Validation { ...

new var

var $_inputdata = array();

2. Replace all $_POST vars to : (ctrl+h)

$this->_inputdata

3. You need to add this function into Validation library : (system/libraries/Validation.php)

 function parse_rules($data) { if( ! is_array($data)) { return false; } else { foreach($data as $eval_array => $rules) { $to_eval = explode(",", $eval_array); $this->_inputdata[$eval_array] = eval('return $_POST[\''.implode("']['", $to_eval).'\'];'); } } }

4. in set_rules() function add one line just before foreach :

 function set_rules($data, $rules = '') { if ( ! is_array($data)) { if ($rules == '') return; $data[$data] = $rules; } $this->parse_rules($data); // Add this line foreach ($data as $key => $val) { $this->_rules[$key] = $val; } }

**Sample : **

... <form> <input type="text" name="search[query]"> </form> ...
 $rules['search,query'] = "required"; // You can add n level array i.e. $rules['level1,level2,level3,level4,...'] // what will be in fact $_POST['level1']['level2']['level3']['level4'][...] $this->CI->validation->set_rules($rules); if ($this->CI->validation->run() !== FALSE) { echo 'OK'; }
Clone this wiki locally