Change record status: 
Project: 
Introduced in branch: 
10.2.x
Introduced in version: 
10.2.0
Description: 

API Changes

file_validate and related functions are deprecated and replaced with Constraint plugins and a 'file.validator' service.

Before:

$validators = ['file_name_length' => []];
/** @var string[] $errors */
$errors = file_validate($file, $validators)

After:

$validators = ['FileNameLength' => []];
/** @var \Drupal\file\Validation\FileValidatorInterface $file_validator */
$file_validator = \Drupal::service('file.validator');
/** @var \Symfony\Component\Validator\ConstraintViolationListInterface $violations */
$violations = $file_validator->validate($file, $validators);

Constraints and their validators are located in the \Drupal\file\Plugin\Validation\Constraint namespace.

Form API changes

The Form API file validation structure for #upload_validators has changed from taking a function name and a list of arguments, to a Constraint Plugin ID and an associative array of options. Passing arbitrary data as part of #upload_validators has been deprecated in 10.2.x and will be disallowed in 11.x. A valid validator plugin ID must be provided.

The following examples show the mapping from file_validate_* functions to constraint plugins.

Before After
'file_validate_extensions' => ['gif png jpg jpeg'] 'FileExtension' => ['extensions' => 'gif png jpg jpeg']
'file_validate_size' => [$max_filesize] 'FileSizeLimit' => ['fileLimit' => $max_filesize]
'file_validate_name_length' => [] 'FileNameLength' => []
'file_validate_is_image' => [] 'FileIsImage' => []
'file_validate_image_resolution' => [$max_dimensions] 'FileImageDimensions' => ['maxDimensions' => $max_dimensions]

In addition a new constraint FileExtensionSecure is always called by FileValidator::validate() to block insecure file uploads.

You can write your own constraint and validator plugin. It will be loaded using the standard plugin discovery mechanism.

Hook Deprecation and New Event

hook_file_validate is deprecated and replaced with a \Drupal\file\Validation\FileValidationEvent that is dispatched by \Drupal\file\Validation\FileValidator::validate() .

Implement an EventSubscriber to add your custom validation code that can add to the ConstraintViolationList.

Additional Changes

The method signature for \Drupal\ckeditor5\Controller\CKEditor5ImageController::prepareFilename() has changed from:

protected function prepareFilename($filename, array &$validators)
to:
protected function prepareFilename(string $filename, string $allowed_extensions): string

Impacts: 
Module developers
Updates Done (doc team, etc.)
Online documentation: 
Not done
Theming guide: 
Not done
Module developer documentation: 
Not done
Examples project: 
Not done
Coder Review: 
Not done
Coder Upgrade: 
Not done
Other: 
Other updates done