public function validate($storeDataInSession = true) { $isValid = true; $this->errorMessage = $this->beforeErrorMessages; // automatically validate form key $formKey = new FormKey(); if (isset($this->data['formKey']) && !$formKey->isValid()) { $this->addErrorMessage('Form Key', 'was missing or incorrect. Please try again'); $isValid = false; } else { // process all rules foreach ($this->rules as $name => $rules) { $rules = explode('|', $rules); $display = $name; if (isset($this->display[$name])) { $display = $this->display[$name]; } $value = ''; if (isset($this->data[$name])) { $value = $this->data[$name]; } if (($key = array_search('optional', $rules)) !== false) { if ($value === '') { // this field is optional and it has no value, so the // validation is complete continue; } unset($rules[$key]); // no need to check optional again } $isFieldValid = true; foreach ($rules as $rule) { $parameters = array(); if (($left = strpos($rule, '[')) !== false) { $right = strrpos($rule, ']'); $parameters = trim(substr($rule, $left + 1, $right - $left - 1)); // range rules require two parameters if (strpos(strtolower($rule), 'range') !== false) { $parameters = explode(',', $parameters); } else { $parameters = array($parameters); } foreach ($parameters as $key => $parameter) { $parameters[$key] = trim($parameter); } $rule = substr($rule, 0, $left); } $parameters[] = $display; $parameters[] = $value; $method = "{$rule}Callback"; if (call_user_func_array(array($this, $method), $parameters) === false) { $isFieldValid = false; } } $isValid = $isValid && $isFieldValid; } } $this->errorMessage .= $this->afterErrorMessages; if (!$isValid && $storeDataInSession === true) { $this->storeFormData($this->data); $this->storeErrorMessage($this->errorMessage); } return $isValid; }