public function validate(array $input, array $ruleset)
{
$this->errors = array();
foreach ($ruleset as $field => $rules) {
$rules = explode('|', $rules);
if (in_array('required', $rules) || isset($input[$field]) && !is_array($input[$field])) {
foreach ($rules as $rule) {
$method = null;
$param = null;
// Check if we have rule parameters
if (strstr($rule, ',') !== false) {
$rule = explode(',', $rule);
$method = 'validate_' . $rule[0];
$param = $rule[1];
$rule = $rule[0];
} else {
$method = 'validate_' . $rule;
}
//self::$validation_methods[$rule] = $callback;
if (is_callable(array($this, $method))) {
$result = $this->{$method}($field, $input, $param);
if (is_array($result)) {
$this->errors[] = $result;
}
} elseif (isset(self::$validation_methods[$rule])) {
$result = call_user_func(self::$validation_methods[$rule], $field, $input, $param);
if ($result === false) {
$this->errors[] = array('field' => $field, 'value' => $input, 'rule' => self::$validation_methods[$rule], 'param' => $param);
}
} else {
throw new Exception("Validator method '{$method}' does not exist.");
}
}
}
}
return count($this->errors) > 0 ? $this->errors : true;
}