Boa noite, pessoal.
Fiz o curso MVC PHP e gostei bastante. Obrigado, Vinicius.
Desenvolvi o meu próprio projeto, tudo funcionou na minha máquina. A dor de cabeça começou quando descobri que a minha hospedagem não permitia o uso do composer. Como não usei bibliotecas(dependências) pois o interesse no composer era apenas o PSR-4, decidi fazer o autoload manual.
Aparentemente tudo estava ok, o sistema carrega o index.php... Outro obstáculo foi o problema do $_SERVER['PATH_INFO']
que tratei da seguinte, escrevi como orientado noutra tread do forum $_SERVER['PATH_INFO'] ?? "/login"
.
O que aconteceu foi o seguinte, mesmo com as rotas e arquivos nas pastas corretas, não há o carregamento do arquivo que faz a autenticação, /act-autenticar-usuario, o resultado do submit sempre é um erro 404 e nada é lido.
O curioso é que quando adiciono o index.php na url, por exemplo, http://projeto/index.php/act-autenticar-usuario, há uma resposta, o sistema lê a url e executa a autenticação. Não sei o que está havendo, alguém pode me ajudar?
Muito grato, Luiz.
Abaixo postei o autoload e index.
- autoload completo
spl_autoload_register(function (string $nomeCompletoDaClasse) { $caminhoArquivo = str_replace('Projeto\\', '..\\core/', $nomeCompletoDaClasse); $caminhoArquivo = str_replace('\\', DIRECTORY_SEPARATOR, $caminhoArquivo); $caminhoArquivo .= '.php'; if(file_exists($caminhoArquivo)) { require_once $caminhoArquivo; } });
- index
<?php // carrega o autoload - manual require __DIR__ . '/../autoload/autoload.php'; // obtem a url $caminho = $_SERVER['PATH_INFO'] ?? "/login"; // obtem as rotas $rotas = require __DIR__ . '/../config/routes.php'; // checa se uma rota valida foi pro http if(!array_key_exists($caminho,$rotas)) { // devolve 404 e sai http_response_code(404); exit(); } // inicia a secao session_start(); // checa se ha um login if(!isset($_SESSION['logado']) && $caminho !== '/login' && $caminho !== '/act-autenticar-usuario') { header('Location: /login'); exit(); } // monta a requisicao $classeControladora = $rotas[$caminho]; $controlador = new $classeControladora(); $controlador -> ProcessarRequisicao();