示例#1
0
 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;
 }