protected function EntityResourceValidationTrait::validate in Drupal 9
Same name and namespace in other branches
- 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\resourceCode
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);
}
}