APP_PATH . '/controllers/', 'App\\Models\\' => APP_PATH . '/models/', 'App\\Helpers\\' => APP_PATH . '/helpers/', 'App\\Config\\' => APP_PATH . '/config/', ]; foreach ($prefixes as $prefix => $base_dir) { $len = strlen($prefix); if (strncmp($prefix, $class, $len) === 0) { $relative_class = substr($class, $len); $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php'; if (file_exists($file)) { require $file; return; } } } }); // Iniciar sessão if (session_status() === PHP_SESSION_NONE) { session_start(); } // Obter URI e método $requestUri = $_SERVER['REQUEST_URI']; $scriptName = $_SERVER['SCRIPT_NAME']; // Remover query string $uri = parse_url($requestUri, PHP_URL_PATH); // Calcular o diretório base do script $scriptDir = dirname($scriptName); // Remover o diretório base da URI if ($scriptDir !== '/' && strpos($uri, $scriptDir) === 0) { $uri = substr($uri, strlen($scriptDir)); } // Normalizar URI $uri = trim($uri, '/'); // Se vazio, definir como raiz if (empty($uri)) { $uri = '/'; } $method = $_SERVER['REQUEST_METHOD']; // Definir rotas $routes = [ // Auth ['GET', 'login', 'AuthController', 'login'], ['POST', 'login', 'AuthController', 'login'], ['GET', 'logout', 'AuthController', 'logout'], ['GET', 'recuperar-senha', 'AuthController', 'recuperarSenha'], ['POST', 'recuperar-senha', 'AuthController', 'recuperarSenha'], // Dashboard ['GET', 'dashboard', 'DashboardController', 'index'], ['GET', '', 'DashboardController', 'index'], // Bens ['GET', 'bens', 'BemController', 'index'], ['GET', 'bens/create', 'BemController', 'create'], ['POST', 'bens/create', 'BemController', 'create'], ['GET', 'bens/(\d+)', 'BemController', 'show'], ['GET', 'bens/(\d+)/edit', 'BemController', 'edit'], ['POST', 'bens/(\d+)/edit', 'BemController', 'edit'], ['GET', 'bens/(\d+)/delete', 'BemController', 'delete'], ['POST', 'bens/(\d+)/transferir', 'BemController', 'transferir'], ['GET', 'bens/(\d+)/etiqueta', 'BemController', 'gerarEtiqueta'], // Categorias ['GET', 'categorias', 'CategoriaController', 'index'], ['GET', 'categorias/create', 'CategoriaController', 'create'], ['POST', 'categorias/create', 'CategoriaController', 'create'], ['GET', 'categorias/(\d+)/edit', 'CategoriaController', 'edit'], ['POST', 'categorias/(\d+)/edit', 'CategoriaController', 'edit'], ['GET', 'categorias/(\d+)/delete', 'CategoriaController', 'delete'], // Departamentos ['GET', 'departamentos', 'DepartamentoController', 'index'], ['GET', 'departamentos/create', 'DepartamentoController', 'create'], ['POST', 'departamentos/create', 'DepartamentoController', 'create'], ['GET', 'departamentos/(\d+)/edit', 'DepartamentoController', 'edit'], ['POST', 'departamentos/(\d+)/edit', 'DepartamentoController', 'edit'], ['GET', 'departamentos/(\d+)/delete', 'DepartamentoController', 'delete'], // Alertas ['GET', 'alertas', 'AlertaController', 'index'], ['GET', 'alertas/(\d+)/lido', 'AlertaController', 'marcarLido'], ['GET', 'alertas/(\d+)/resolvido', 'AlertaController', 'marcarResolvido'], ['GET', 'alertas/gerar', 'AlertaController', 'gerar'], ['GET', 'api/alertas/unread', 'AlertaController', 'apiUnread'], // Leilões ['GET', 'leiloes', 'LeilaoController', 'index'], ['GET', 'leiloes/create', 'LeilaoController', 'create'], ['POST', 'leiloes/create', 'LeilaoController', 'create'], ['GET', 'leiloes/(\d+)/edit', 'LeilaoController', 'edit'], ['POST', 'leiloes/(\d+)/agendar', 'LeilaoController', 'agendar'], ['POST', 'leiloes/(\d+)/completar', 'LeilaoController', 'completar'], ['POST', 'leiloes/(\d+)/cancelar', 'LeilaoController', 'cancelar'], // Movimentações ['GET', 'movimentacoes', 'MovimentacaoController', 'index'], // Relatórios ['GET', 'relatorios', 'RelatorioController', 'index'], ['GET', 'relatorios/inventario', 'RelatorioController', 'inventario'], ['GET', 'relatorios/alertas', 'RelatorioController', 'alertas'], ['GET', 'relatorios/leiloes', 'RelatorioController', 'leiloes'], ['GET', 'relatorios/depreciacao', 'RelatorioController', 'depreciacao'], ['GET', 'bens/foto/(\d+)/excluir', 'BemController', 'excluirFoto'], ['GET', 'bens/foto/(\d+)/principal', 'BemController', 'definirPrincipal'], // Adicionar estas rotas no array $routes: // Adicionar no array $routes: ['GET', 'configuracoes', 'ConfiguracaoController', 'index'], ['POST', 'configuracoes/salvar', 'ConfiguracaoController', 'salvar'], // Movimentações ['GET', 'movimentacoes', 'MovimentacaoController', 'index'], ['GET', 'movimentacoes/create', 'MovimentacaoController', 'create'], ['POST', 'movimentacoes/create', 'MovimentacaoController', 'create'], // Relatórios Avançados ['GET', 'relatorios', 'RelatorioController', 'index'], ['GET', 'relatorios/inventario', 'RelatorioController', 'inventario'], ['GET', 'relatorios/etiquetas', 'RelatorioController', 'etiquetas'], ['GET', 'relatorios/alertas', 'RelatorioController', 'alertas'], ['GET', 'relatorios/leiloes', 'RelatorioController', 'leiloes'], ['GET', 'relatorios/depreciacao', 'RelatorioController', 'depreciacao'], ['GET', 'relatorios/dashboard', 'RelatorioController', 'dashboard'], ['GET', 'relatorios/departamento', 'RelatorioController', 'departamento'], // Usuários ['GET', 'usuarios', 'UsuarioController', 'index'], ['GET', 'usuarios/create', 'UsuarioController', 'create'], ['POST', 'usuarios/create', 'UsuarioController', 'create'], ['GET', 'usuarios/(\d+)/edit', 'UsuarioController', 'edit'], ['POST', 'usuarios/(\d+)/edit', 'UsuarioController', 'edit'], ['GET', 'usuarios/(\d+)/delete', 'UsuarioController', 'delete'], ]; // Processar rotas $matched = false; $params = []; $controllerName = ''; $methodName = ''; foreach ($routes as $route) { list($routeMethod, $routePath, $ctrlName, $methName) = $route; $pattern = '#^' . $routePath . '$#'; if ($method === $routeMethod && preg_match($pattern, $uri, $matches)) { $matched = true; array_shift($matches); $params = $matches; $controllerName = $ctrlName; $methodName = $methName; break; } } if (!$matched) { http_response_code(404); echo '
URI: ' . htmlspecialchars($uri) . '
'; echo 'Método: ' . htmlspecialchars($method) . '
'; exit; } // Executar controller $controllerClass = 'App\\Controllers\\' . $controllerName; if (!class_exists($controllerClass)) { die("Controller não encontrado: {$controllerClass}"); } $controller = new $controllerClass(); if (!method_exists($controller, $methodName)) { die("Método não encontrado: {$methodName}"); } try { call_user_func_array([$controller, $methodName], $params); } catch (Exception $e) { http_response_code(500); echo '' . htmlspecialchars($e->getMessage()) . '
'; echo '' . htmlspecialchars($e->getTraceAsString()) . ''; }