/** * get error info from model * * @param CModel $model * @return string * @see CModel */ public static function errorModelSummery($model, $attribute = null) { if (is_null($attribute)) { return self::errorSummery($model->getErrors()); } else { $aryError = $model->getError($attribute, false); return empty($aryError) ? '' : self::errorSummery(array($aryError)); } }
/** * @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; }
/** * Return array of errors on form and model. * Currently this method does not support specifying the $attributeNameOrNames parameter. */ public function getErrors($attributeNameOrNames = null) { $formErrors = parent::getErrors($attributeNameOrNames); $modelErrors = $this->model->getErrors($attributeNameOrNames); return array_merge($formErrors, $modelErrors); }