function EntityResourceValidationTrait::validate

Same name and namespace in other branches
  1. 8.9.x core/modules/rest/src/Plugin/rest/resource/EntityResourceValidationTrait.php \Drupal\rest\Plugin\rest\resource\EntityResourceValidationTrait::validate()
  2. 10 core/modules/rest/src/Plugin/rest/resource/EntityResourceValidationTrait.php \Drupal\rest\Plugin\rest\resource\EntityResourceValidationTrait::validate()
  3. 11.x 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.

5 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::post in core/modules/file/src/Plugin/rest/resource/FileUploadResource.php
Creates a file from an endpoint.
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 <a href="https://www.drupal.org/node/2300677">https://www.drupal.org/node/2300677</a>

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);
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.