You are here

protected function EntityResourceValidationTrait::validate in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/rest/src/Plugin/rest/resource/EntityResourceValidationTrait.php \Drupal\rest\Plugin\rest\resource\EntityResourceValidationTrait::validate()

Verifies that an entity does not violate any validation constraints.

The validation errors will be filtered to not include fields to which the current user does not have access and if $fields_to_validate is provided will only include fields in that array.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The entity to validate.

string[] $fields_to_validate: (optional) An array of field names. If specified, filters the violations list to include only this set of fields.

Throws

\Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException If validation errors are found.

4 calls to EntityResourceValidationTrait::validate()
EntityResource::patch in core/modules/rest/src/Plugin/rest/resource/EntityResource.php
Responds to entity PATCH requests.
EntityResource::post in core/modules/rest/src/Plugin/rest/resource/EntityResource.php
Responds to entity POST requests and saves the new entity.
FileUploadResource::validate in core/modules/file/src/Plugin/rest/resource/FileUploadResource.php
Validates the file.
UserRegistrationResource::post in core/modules/user/src/Plugin/rest/resource/UserRegistrationResource.php
Responds to user registration POST request.

File

core/modules/rest/src/Plugin/rest/resource/EntityResourceValidationTrait.php, line 32

Class

EntityResourceValidationTrait
@internal @todo Consider making public in https://www.drupal.org/node/2300677

Namespace

Drupal\rest\Plugin\rest\resource

Code

protected function validate(EntityInterface $entity, array $fields_to_validate = []) {

  // @todo Update this check in https://www.drupal.org/node/2300677.
  if (!$entity instanceof FieldableEntityInterface) {
    return;
  }
  $violations = $entity
    ->validate();

  // Remove violations of inaccessible fields as they cannot stem from our
  // changes.
  $violations
    ->filterByFieldAccess();
  if ($fields_to_validate) {

    // Filter violations by explicitly provided array of field names.
    $violations
      ->filterByFields(array_diff(array_keys($entity
      ->getFieldDefinitions()), $fields_to_validate));
  }
  if ($violations
    ->count() > 0) {
    $message = "Unprocessable Entity: validation failed.\n";
    foreach ($violations as $violation) {

      // We strip every HTML from the error message to have a nicer to read
      // message on REST responses.
      $message .= $violation
        ->getPropertyPath() . ': ' . PlainTextOutput::renderFromHtml($violation
        ->getMessage()) . "\n";
    }
    throw new UnprocessableEntityHttpException($message);
  }
}