/** * @param \CModel $model * @param null $path * @return array */ public function generateModelErrorFields(\CModel $model, $path = null) { $validators = \CValidator::$builtInValidators; if ($this->hasEventHandler('onBeforeGenerateError')) { $this->onBeforeGenerateError(new \CEvent($this, array('model' => $model))); } $errors = $model->getErrors(); $errorFields = array_keys($errors); $errorHandled = array(); $i = 0; $result = array(); foreach ($model->getValidators() as $validator) { if (isset($hasError) && $validator->skipOnError || !array_intersect($validator->attributes, $errorFields)) { continue; } $model->clearErrors(); $validator->validate($model); if ($model->hasErrors()) { $hasError = true; $code = array_search(get_class($validator), $validators); if ($validator instanceof \CInlineValidator) { $code = $validator->method; } foreach ($validator->attributes as $attribute) { if ($model->hasErrors($attribute)) { $result[$i]['code'] = $code; $result[$i]['message'] = $model->getError($attribute); $result[$i]['name'] = $path ? $path . '[' . $attribute . ']' : $attribute; $errorHandled[] = $attribute; $i++; } } } } foreach (array_diff($errorFields, $errorHandled) as $attribute) { $result[$i]['code'] = 'unknown'; $result[$i]['message'] = implode(',', $errors[$attribute]); $result[$i]['name'] = $path ? $path . '[' . $attribute . ']' : $attribute; } return $result; }
/** * @param \CModel $model * @return array */ protected function _generateModelErrorFields(\CModel $model) { $validators = \CValidator::$builtInValidators; $errors = $model->getErrors(); $errorFields = array_keys($errors); $errorHandled = array(); $i = 0; $result = array(); foreach ($model->getValidators() as $validator) { if (isset($hasError) && $validator->skipOnError || !array_intersect($validator->attributes, $errorFields)) { continue; } $model->clearErrors(); $validator->validate($model); if ($model->hasErrors()) { $hasError = true; $code = array_search(get_class($validator), $validators); if ($validator instanceof \CInlineValidator) { $code = $validator->method; } foreach ($validator->attributes as $attribute) { if ($model->hasErrors($attribute)) { $result[$i]['code'] = $code; $result[$i]['message'] = $model->getError($attribute); $result[$i]['name'] = $attribute; $errorHandled[] = $attribute; $i++; } } } } foreach (array_diff($errorFields, $errorHandled) as $attribute) { $result[$i]['code'] = 'unknown'; $result[$i]['message'] = implode(',', $errors[$attribute]); $result[$i]['name'] = $attribute; } return $result; }