2
respostas

[Sugestão] Pra quem quiser o método para deletar a imagem

function no repositório:

public function removeImage (string $filePath): void
    {
        unlink($filePath); // Deleta a imagem do sistema de arquivos
        $sql = 'UPDATE videos SET image_path = NULL WHERE image_path = ?';
        $statement = $this->pdo->prepare($sql);
        $statement->bindValue(1, $filePath);
        $statement->execute();
    }

Rota:

'GET | /remover-imagem' => DeleteImageController::class,

Controller:

<?php

namespace Alura\Mvc\Controller;

use Alura\Mvc\Repository\VideoRepository;

class DeleteImageController implements Controller
{
    public function __construct(private VideoRepository $videoRepository)
    {
    }

    public function processaRequisicao(): void
    {
        $filePath = filter_input(INPUT_GET, 'image_path');
        if ($filePath === null || $filePath === false) {
            header('Location: /?sucesso=0');
            return;
        }

        $success = $this->videoRepository->removeImage($filePath);
        if ($success === false) {
            header('Location: /?sucesso=0');
        } else {
            header('Location: /?sucesso=1');
        }

    }
}

HTML:

<a href="/remover-imagem?image_path=<?= $video->filePath; ?>" >Excluir banner</a>
2 respostas

Gostei bastante da sua solução Luiz! Parabéns!

Se você me permite uma sugestão:

Uma forma de melhorar o código acima é separando a lógica de remoção de arquivos do sistema de arquivos e atualização do banco de dados em métodos diferentes e/ou classes diferentes. Isso ajudaria a manter o código mais organizado e fácil de entender e manter. Além disso, essa abordagem também possibilitaria a reutilização desses métodos em outros lugares do seu código.

Aqui está um exemplo de como essa abordagem poderia ser implementada:

class FileRemover {
    public function remove(string $filePath): void
    {
        unlink($filePath);
    }
}

class VideoRepository {
    private $pdo;
    private $fileRemover;

    public function __construct(PDO $pdo, FileRemover $fileRemover)
    {
        $this->pdo = $pdo;
        $this->fileRemover = $fileRemover;
    }

    public function removeImage(string $filePath): void
    {
        $this->fileRemover->remove($filePath);
        $sql = 'UPDATE videos SET image_path = NULL WHERE image_path = ?';
        $statement = $this->pdo->prepare($sql);
        $statement->bindValue(1, $filePath);
        $statement->execute();
    }
}

Dessa forma, a lógica de remoção do arquivo foi separada em uma classe separada, "FileRemover" e a lógica de atualização do banco de dados em outra classe "VideoRepository", tornando o código mais fácil de ler e manter.

Opa, valeu Danilo! Boa dica.