Segue a implementação do slug para padrozinar o nome do arquivo que for salvo no sistema:
- Primeiro coloquei o upload de imagem em uma função no VideoRepository (o Vinicius tinha pedido faz tempo mas fiz só agora rs)
public function uploadImageVideo(Video $video): void
{
$fileTempName = uniqid('upload_') . '_' . $this->slugify($_FILES['image']['name']);
$fInfo = new finfo(FILEINFO_MIME_TYPE);
$mimeType = $fInfo->file($_FILES['image']['tmp_name']);
if (str_starts_with($mimeType,'image/')) {
move_uploaded_file(
$_FILES['image']['tmp_name'],
__DIR__ . '/../../public/img/uploads/' . $fileTempName
);
$video->setFilePath($fileTempName);
}
}
- No trecho que trata o nome do arquivo na variavel $fileTempName coloquei uma chamada para a função slugfy, achei ela no stack overflow, parece vir de uma biblioteca Symfony's Jobeet, segue ela:
public function slugify($text, string $divider = '-')
{
$text = preg_replace('~[^\pL\d]+~u', $divider, $text);
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
$text = preg_replace('~[^-\w]+~', '', $text);
$text = trim($text, $divider);
$text = preg_replace('~-+~', $divider, $text);
$text = strtolower($text);
if (empty($text)) {
return 'n-a';
}
return $text;
}
Testei com um arquivo chamado "Poster do Duna Parte 2" e ficou com o nome: upload_6605732fd3d8c_poster-do-duna-parte-2-jpg