function FileValidator::validate

Same name and namespace in other branches
  1. 11.x core/modules/file/src/Validation/FileValidator.php \Drupal\file\Validation\FileValidator::validate()

File

core/modules/file/src/Validation/FileValidator.php, line 43

Class

FileValidator
Provides a class for file validation.

Namespace

Drupal\file\Validation

Code

public function validate(FileInterface $file, array $validators) : ConstraintViolationListInterface {
    $constraints = [];
    $errors = [];
    foreach ($validators as $validator => $options) {
        if (function_exists($validator)) {
            @trigger_error('Support for file validation function ' . $validator . '() is deprecated in drupal:10.2.0 and will be removed in drupal:11.0.0. Use Symfony Constraints instead. See https://www.drupal.org/node/3363700', E_USER_DEPRECATED);
            if (!is_array($options)) {
                $options = [
                    $options,
                ];
            }
            array_unshift($options, $file);
            // Call the validation function.
            // Options are a list of function args.
            $errors = array_merge($errors, call_user_func_array($validator, $options));
        }
        else {
            // Create the constraint.
            // Options are an associative array of constraint properties and values.
            try {
                $constraints[] = $this->constraintManager
                    ->create($validator, $options);
            } catch (PluginNotFoundException) {
                @trigger_error(sprintf('Passing invalid constraint plugin ID "%s" in the list of $validators to Drupal\\file\\Validation\\FileValidator::validate() is deprecated in drupal:10.2.0 and will throw an exception in drupal:11.0.0. See https://www.drupal.org/node/3363700', $validator), E_USER_DEPRECATED);
            }
        }
    }
    // Call legacy hook implementations.
    $errors = array_merge($errors, $this->moduleHandler
        ->invokeAllDeprecated('Use file validation events instead. See https://www.drupal.org/node/3363700', 'file_validate', [
        $file,
    ]));
    $violations = new ConstraintViolationList();
    // Convert legacy errors to violations.
    $translator = new DrupalTranslator();
    foreach ($errors as $error) {
        $violation = new ConstraintViolation($translator->trans($error), $error, [], $file, '', NULL);
        $violations->add($violation);
    }
    // Get the typed data.
    $fileTypedData = $file->getTypedData();
    $violations->addAll($this->validator
        ->validate($fileTypedData, $constraints));
    $this->eventDispatcher
        ->dispatch(new FileValidationEvent($file, $violations));
    // Always check the insecure upload constraint.
    if (count($violations) === 0) {
        $insecureUploadConstraint = $this->constraintManager
            ->create('FileExtensionSecure', []);
        $violations = $this->validator
            ->validate($fileTypedData, $insecureUploadConstraint);
    }
    return $violations;
}

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