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

Não foi possível encontrar a página deste localhost

Boa tarde, ao adicionar o id na url de exclusão me retorna um erro 404

Não foi possível encontrar a página deste localhostNenhuma página da web foi encontrada para o endereço da Web:http://localhost:8080/excluir-curso?id=2 HTTP ERROR 404

Isso acontece para todos os ids, se eu passo somente o href /excluir-curso ele funciona normal, inclusive entra no if para tratamento em Exclusão.php

 if (is_null($id) || $id === false) {
            header('Location: /listar-cursos');
            return;
        }

Segue o código do arquivo view\cursos\listar-cursos.php

<?php include __DIR__ . '/../header.php'; ?>
    <a href="/novo-curso" class="btn btn-primary mb-2">
        Novo curso
    </a>

    <ul class="list-group">
        <?php foreach ($cursos as $curso) : ?>
            <li class="list-group-item d-flex justify-content-between">
                <?= $curso->getDescricao(); ?>
                <a href="/excluir-curso?id=<?= $curso->getId(); ?>" class="btn btn-danger btn-sm">
                    Excluir
                </a>
            </li>
        <?php endforeach; ?>
    </ul>
<?php include __DIR__ . '/../footer.php'; ?>

O que posso estar fazendo de errado?

1 resposta
solução!

Então galera resolvi o problema, o Vinicius usa a variável do servidor $SERVER['PATHINFO']; no arquivo index.php para comparar com as rotas pré-definidas no arquivo routes.php, porém no meu caso ela não funciona e eu estava usando $SERVER['REQUESTURI'], só que ela não fazia distinção sobre o que era a Url e o que eram os parâmetros e comparava por inteiro, por exemplo na url 'http://localhost:8080/excluir-curso?id=10' ele buscava exatamente 'excluir-curso?id=10' nas rotas, como ela não existia, era exibido o erro 404.

Segue meu código corrigido (index.php)

<?php

// fazer log de todas as requisições
require __DIR__ . '/../vendor/autoload.php';

use Alura\Cursos\Controller\InterfaceControladorRequisicao;

$caminho = parse_url($_SERVER['REQUEST_URI']);
$rotas = require __DIR__ . '/../config/routes.php';

if (!array_key_exists($caminho['path'], $rotas)) {
    http_response_code(404);
    exit();
}

$classeControladora = $rotas[$caminho['path']];
/** @var InterfaceControladorRequisicao $controlador */
$controlador = new $classeControladora();
$controlador->processaRequisicao();

OBS.: A versão do meu PHP é a 7.4.25