feat(FileUploadHandler): allow to upload multiple files

add specific callback "afterUploadsCallback" when multiple files are uploaded
This commit is contained in:
Simon Vieille 2025-02-28 10:11:46 +01:00
commit 3755fcccf1

View file

@ -20,27 +20,53 @@ class FileUploadHandler
return $this;
}
public function handleForm(?UploadedFile $uploadedFile, string $path, ?callable $afterUploadCallback = null, bool $keepOriginalFilename = false): void
public function handleForm(
null|array|UploadedFile $uploadedFile,
string $path,
?callable $afterUploadCallback = null,
?callable $afterUploadsCallback = null,
bool $keepOriginalFilename = false
): null|array|string
{
if (null === $uploadedFile) {
return;
return null;
}
$originalFilename = pathinfo($uploadedFile->getClientOriginalName(), PATHINFO_FILENAME);
if (is_array($uploadedFile)) {
$filenames = [];
if ($keepOriginalFilename) {
$filename = $originalFilename.'.'.$uploadedFile->guessExtension();
} elseif (!is_callable($this->filenameGenerator)) {
$safeFilename = transliterator_transliterate('Any-Latin; Latin-ASCII; [^A-Za-z0-9_] remove; Lower()', $originalFilename);
$filename = date('Ymd-his').$safeFilename.'.'.$uploadedFile->guessExtension();
foreach ($uploadedFile as $file) {
$filename = $this->handleForm($file, $path, $afterUploadCallback, null, $keepOriginalFilename);
if ($filename !== null) {
$filenames[] = $filename;
}
}
if (!empty($filenames) && $afterUploadsCallback) {
$afterUploadsCallback($filenames);
}
return $filenames;
} else {
$filename = call_user_func($this->filenameGenerator, $uploadedFile);
}
$originalFilename = pathinfo($uploadedFile->getClientOriginalName(), PATHINFO_FILENAME);
$uploadedFile->move($path, $filename);
if ($keepOriginalFilename) {
$filename = $originalFilename.'.'.$uploadedFile->guessExtension();
} elseif (!is_callable($this->filenameGenerator)) {
$safeFilename = transliterator_transliterate('Any-Latin; Latin-ASCII; [^A-Za-z0-9_] remove; Lower()', $originalFilename);
$filename = date('Ymd-his').$safeFilename.'.'.$uploadedFile->guessExtension();
} else {
$filename = call_user_func($this->filenameGenerator, $uploadedFile);
}
if ($afterUploadCallback) {
$afterUploadCallback($filename);
$uploadedFile->move($path, $filename);
if ($afterUploadCallback) {
$afterUploadCallback($filename);
}
return $filename;
}
}
}