Comment valider une image lors du téléchargement si elle est au format 16:9 ?
Pour ce faire, vous devez ajouter upload_validators au widget de champ en utilisant hook_form_alter comme suit :
/**
* Implements hook_form_alter().
*/
function MODULENAME_form_alter(&$form, FormStateInterface $form_state, $form_id) {
switch ($form_id) {
case 'node_article_form':
case 'node_article_edit_form':
$form['field_image']['widget'][0]['#upload_validators']['_validate_article_image'] = [];
break;
}
}
et ensuite implémenter le callback _validate_article_image :
/**
* Validate article image.
*
* @param \Drupal\file\FileInterface $file
* File object.
*
* @return array
* Errors array.
*/
function _validate_article_image(FileInterface $file) {
$errors = [];
$image = \Drupal::service('image.factory')->get($file->getFileUri());
if ($image->isValid()) {
// Ajoutez vos validations de condition ici !
$width = $image->getWidth();
$height = $image->getHeight();
if ($width / $height != 16 / 9) {
$errors[] = t("The image should be 16:9 format!");
}
}
return $errors;
}
Voilà c'est fait.
https://www.berramou.com/blog/drupal-8-9-add-custom-validation-file-upload