Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Implementação de Slug para upload de imagem

Segue a implementação do slug para padrozinar o nome do arquivo que for salvo no sistema:

  1. 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);
        }
    }
  1. 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

1 resposta
solução!

Oii Guilherme, tudo bem?

Muito obrigada por compartilhar com a gente!

Sua implementação para gerar um slug para os nomes de arquivo ao lidar com uploads de imagem tá bem pensada e funcional. Continue com o bom trabalho!

Um abraço e bons estudos.