Exemplo n.º 1
0
 /**
  * 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;
     }
 }
Exemplo n.º 2
0
  /**
   * 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;
  }