/** * Validate object. * * @throws RestfulBadRequestException * Throws exception with the error per object. */ public function validate() { if (!($handler = entity_validator_get_schema_validator($this->validateHandler))) { return; } $result = $handler->validate($this->getObject(), TRUE); $errors_output = array(); if (!$result) { $e = new \RestfulBadRequestException("It's look that you sent a request with bad values."); $fields_errors = $handler->getErrors(FALSE); foreach ($fields_errors as $field => $errors) { foreach ($errors as $error) { $errors_output[$field][] = format_string($error['message'], $error['params']); } $e->addFieldError($field, implode(', ', $errors_output[$field])); } throw $e; } }
/** * Validate an entity before it is saved. * * @param \EntityMetadataWrapper $wrapper * The wrapped entity. * * @throws \RestfulBadRequestException */ public function entityValidate(\EntityMetadataWrapper $wrapper) { if (!module_exists('entity_validator')) { // Entity validator doesn't exist. return; } if (!$handler = entity_validator_get_validator_handler($wrapper->type(), $wrapper->getBundle())) { // Entity validator handler doesn't exist for the entity. return; } if ($handler->validate($wrapper->value(), TRUE)) { // Entity is valid. return; } $errors = $handler->getErrors(FALSE); $map = array(); foreach ($this->getPublicFields() as $field_name => $value) { if (empty($value['property'])) { continue; } if (empty($errors[$value['property']])) { // Field validated. continue; } $map[$value['property']] = $field_name; $params['@fields'][] = $field_name; } if (empty($params['@fields'])) { // There was a validation error, but on non-public fields, so we need to // throw an exception, but can't say on which fields it occurred. throw new \RestfulBadRequestException('Invalid value(s) sent with the request.'); } $params['@fields'] = implode(',', $params['@fields']); $e = new \RestfulBadRequestException(format_plural(count($map), 'Invalid value in field @fields.', 'Invalid values in fields @fields.', $params)); foreach ($errors as $property_name => $messages) { if (empty($map[$property_name])) { // Entity is not valid, but on a field not public. continue; } $field_name = $map[$property_name]; foreach ($messages as $message) { $message['params']['@field'] = $field_name; $output = format_string($message['message'], $message['params']); $e->addFieldError($field_name, $output); } } // Throw the exception. throw $e; }