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