1
resposta

Não consegui editar com o Frontcontroller

<?php

declare(strict_types=1);

$path = explode('?', $_SERVER['REQUEST_URI'])[0] ;
echo $path;

if (array_key_exists('REQUEST_URI', $_SERVER)||$_SERVER['REQUEST_URI'] === '/') {
    require_once 'listagem-videos.php';
} elseif ($path === '/novo-video') {
    if ($_SERVER['REQUEST_METHOD'] === 'GET') {
        require_once 'formulario.php';
    } elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
        require_once 'novo-video.php';
    }
} elseif ($path === '/editar-video') {
    if ($_SERVER['REQUEST_METHOD'] === 'GET') {
        require_once 'formulario.php';
    } elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
        require_once 'editar-video.php';
    }
} elseif ($path === '/remover-video') {
    require_once 'remover-video.php';
}
<?php

require __DIR__ . '/src/infra/ConnectionDB.php';
$pdo = ConnectionDB::connect($host, $db, $user, $password);

$sql = "SELECT * FROM videos;";
$videoList = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);

function displayMessage($key)
{
    $messages = [
        'success_add' => 'Vídeo enviado com sucesso!',
        'error_add' => 'Erro ao enviar o vídeo. Tente novamente.',
        'success_delete' => 'Vídeo excluído com sucesso!',
        'error_delete' => 'Erro ao excluir o vídeo.',
        'error_invalid_url' => 'URL inválida. Certifique-se de que começa com http:// ou https://.',
        'error_invalid_title' => 'Título do video inválido!',
        'error_edit' => 'Erro ao editar video',
        'success_edit' => 'Video editado com sucesso!',
    ];

    return $messages[$key] ?? '';
}

?>
<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="./css/reset.css">
    <link rel="stylesheet" href="./css/estilos.css">
    <link rel="stylesheet" href="./css/flexbox.css">
    <title>Anime Stream</title>
    <link rel="shortcut icon" href="./img/cabecalho/video_call.png" type="image/x-icon">
</head>

<body>

    <header>

        <nav class="cabecalho">
            <a href="/">
                <img src="/img/cabecalho/Logo.png" class="logo" alt="logo anime stream">
            </a>

            <div class="cabecalho__icones">
                <a href="/src/novo-video.php" class="cabecalho__videos"></a>
                <a href="./pages/login.html" class="cabecalho__sair"></a>
            </div>
        </nav>

    </header>

    <?php if (isset($_GET['message'])): ?>
        <div id="mensagem" class="mensagem">
            <p class="mensagem <?= str_contains($_GET['message'], 'error') ? 'mensagem--erro' : 'mensagem--sucesso'; ?>">
                <?= displayMessage($_GET['message']); ?>
            </p>
        </div>
    <?php endif; ?>

    <ul class="videos__container" alt="videos alura">
        <?php foreach ($videoList as $video): ?>
            <?php if (str_starts_with($video['url'], 'http')): ?>
                <li class="videos__item">
                    <iframe width="100%" height="72%" src="<?php echo $video['url']; ?>"
                        title="YouTube video player" frameborder="0"
                        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
                        allowfullscreen></iframe>
                    <div class="descricao-video">
                        <img src="/img/cabecalho/Logo.png" alt="logo canal alura">
                        <h3><?php echo $video['title']; ?></h3>
                        <div class="acoes-video">
                            <a href="/editar-video?id=<?= $video['id']; ?>">Editar</a>
                            <a href="/remover-video?id=<?= $video['id']; ?>">Excluir</a>
                        </div>
                    </div>
                </li>
            <?php endif; ?>
        <?php endforeach; ?>
    </ul>
1 resposta

Oi Maria! Tudo bem?

Primeiro, é importante verificar se a URL para edição está correta. No seu código, você está utilizando "/editar-video?id=<?= $video['id']; ?>" para a edição. Isso parece estar correto, mas certifique-se de que o arquivo editar-video.php está preparado para receber o ID do vídeo e processar a edição corretamente.

Além disso, no seu arquivo de Front Controller, você está verificando o $_SERVER['REQUEST_URI'] para determinar qual ação tomar. No entanto, o exemplo do curso sugere o uso de $_SERVER['PATH_INFO']. Isso pode ser uma diferença importante, especialmente se o servidor embutido do PHP está configurado para usar PATH_INFO para rotas amigáveis.

Aqui está uma sugestão prática para ajustar seu código:

  1. Verifique o uso de PATH_INFO: Tente substituir $_SERVER['REQUEST_URI'] por $_SERVER['PATH_INFO'] no seu Front Controller. Isso pode ajudar a alinhar seu código com o exemplo do curso.

  2. Confirme o processamento do ID: No arquivo editar-video.php, certifique-se de que o ID do vídeo está sendo recebido corretamente e que o SQL de atualização está funcionando como esperado.

  3. Teste a URL diretamente: Acesse diretamente a URL de edição no navegador (por exemplo, http://localhost:8080/editar-video?id=1) e veja se o formulário é exibido corretamente. Isso pode ajudar a isolar se o problema está na rota ou em outro lugar.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.