protected function _mapException(\Exception $e, $map = null, $useKey = false) { if ($e instanceof ValidateException) { $errors = $e->getValidationErrors(); if (!$map) { $map = $this->_mapModelToSdp; } $message = $this->_mapExceptionMessage($e, $map); foreach ($errors as $attr => $err) { if ($useKey) { $new = current(array_keys($map, $attr)); } else { if (isset($map[$attr])) { // Map validation error $new = $map[$attr]; } } if (isset($new)) { $errors[$new] = $err; unset($errors[$attr]); unset($new); } } return new ValidateException($message, array('validationErrors' => $errors, 'entity' => $e->getEntity())); } return $e; }
/** * Renders validation errors and sends a 422 error code * * @param \Exception $error Exception instance * @return \Cake\Network\Response */ public function validation($error) { $url = $this->controller->request->here(); $status = $code = $error->getCode(); try { $this->controller->response->statusCode($status); } catch (Exception $e) { $status = 422; $this->controller->response->statusCode($status); } $sets = ['code' => $code, 'url' => h($url), 'message' => $error->getMessage(), 'error' => $error, 'errorCount' => $error->getValidationErrorCount(), 'errors' => $error->getValidationErrors(), '_serialize' => ['code', 'url', 'message', 'errorCount', 'errors']]; $this->controller->set($sets); return $this->_outputMessage('error400'); }
public function createError(\Exception $ex) { if ($ex instanceof \Application\Exceptions\ValidateException) { $error = $this->_getFirstError($ex->getValidationErrors(), $field, $message); // Error message has a valid UNICA format? if ($message && !preg_match('/^Supported values are (.+)/', $message)) { $message = ''; } } else { $field = '#unknownField#'; $error = '#unknownError#'; } $errorModel = new ErrorModel(array('fault' => array('code' => FaultModel::FAULT_CODE_CLIENT, 'description' => "Generic Validation fault"), 'code' => 1021, 'category' => ErrorModel::ERROR_CATEGORY_SVC, 'description' => $field ? 'Invalid parameter value: ' . $field . ". " . $message : $ex->getMessage())); switch ($error) { case \Zend_Validate_StringLength::TOO_SHORT: case \Zend_Validate_StringLength::TOO_LONG: $errorModel->description = "Invalid '" . $field . "' length." . $message; $errorModel->code = 1011; break; case \Zend_Validate_InArray::NOT_IN_ARRAY: switch ($field) { case 'lifeCycleState': $errorModel->description = "Invalid parameter value: {$field}. Supported values are " . implode(",", LifeCycleModel::getStatuses()); break; case 'simType': $errorModel->description = "Invalid parameter value: {$field}. Supported values are " . implode(",", array(\Application\Model\SimModel::SIM_TYPE_GLOBAL, \Application\Model\SimModel::SIM_TYPE_LOCAL)); break; default: $errorModel->description = "Invalid parameter value: {$field}"; break; } break; case 'badPeriod': $errorModel->description = "Invalid parameter value: {$field}."; break; case \App_Validate_NotEmptyIfField::IS_EMPTY: $errorModel->description = "Needed parameter was not found: {$field}."; $errorModel->code = 1020; break; } return $errorModel; }
public function createError(\Exception $ex) { if ($ex instanceof ValidateException) { $error = $this->_getFirstError($ex->getValidationErrors(), $field, $message); // Error message has a valid UNICA format? $origMessage = $message; if ($message && !preg_match('/^Supported values are (.+)/', $message)) { $message = ''; } } else { $field = '#unknownField#'; $error = '#unknownError#'; } $exMessage = preg_replace('/(.*)filter\\s*\'(\\w+)\': (.*)/', '$1parameter value: $2.', $ex->getMessage()); $errorModel = new ErrorModel(array('fault' => array('code' => FaultModel::FAULT_CODE_CLIENT, 'description' => "Generic Validation fault"), 'code' => 1021, 'category' => ErrorModel::ERROR_CATEGORY_SVC, 'description' => $field ? 'Invalid parameter value: ' . $field . ". " . $message : $exMessage)); switch ($error) { case 'customerId': //TODO this validation should throw a NotFoundException instead //of a ValidationException this is a very dirty approach to the //problem if (preg_match("/No\\sorganization\\s'(?P<customerId>[[:ascii:]]+)'\\swas\\sfound/", $origMessage, $matches)) { $message = sprintf("Resource %s does not exist", $matches['customerId']); $errorModel->description = $message; $errorModel->code = 1006; } break; //[Apism2m] SVC 1020 o SVC 1021 //According mail from apism2m list, change 1020 code to 1021. // case \Zend_Validate_NotEmpty::IS_EMPTY: // $errorModel->description = "Needed parameter not found: '" . $field . "' - " . $message; // $errorModel->code = 1020; // break; //[Apism2m] SVC 1020 o SVC 1021 //According mail from apism2m list, change 1020 code to 1021. // case \Zend_Validate_NotEmpty::IS_EMPTY: // $errorModel->description = "Needed parameter not found: '" . $field . "' - " . $message; // $errorModel->code = 1020; // break; case \Zend_Validate_StringLength::TOO_LONG: if (preg_match('/is more than (?P<num>\\d+) characters long/', $origMessage, $matches)) { $message = 'Length should be less than ' . $matches['num'] . ' characters'; } $errorModel->description = "Invalid '" . $field . "' length. " . $message; $errorModel->code = 1011; break; case \Zend_Validate_InArray::NOT_IN_ARRAY: switch ($field) { case 'lifeCycleState': $errorModel->description = "Invalid parameter value: {$field}. Supported values are " . implode(",", LifeCycleModel::getStatuses()); break; case 'simType': $errorModel->description = "Invalid parameter value: {$field}. Supported values are " . implode(",", array(\Application\Model\SimModel::SIM_TYPE_GLOBAL, \Application\Model\SimModel::SIM_TYPE_LOCAL)); break; default: $errorModel->description = "Invalid parameter value: {$field}"; break; } break; case 'badPeriod': $errorModel->description = "Invalid parameter value: {$field}."; break; case \App_Validate_Enum_Currency::CURRENCY: $errorModel->description = "Invalid parameter value: {$field}."; break; case \App_Validate_NotEmptyIfField::IS_EMPTY: $errorModel->description = "Needed parameter was not found: {$field}."; $errorModel->code = 1020; break; case \App_Validate_GSM0338Charset::INVALID_CHAR: $errorModel->code = 1012; break; } return $errorModel; }