如何修复Autoloader引发的Class Not Found错误?
解决"App\Router"类找不到的问题
错误信息
GET / - Uncaught Error: Class "App\Router" not found in /home/zumb/Documents/HHsite/ALPHA_VERSION/public/index.php:4 Stack trace: #0 {main} thrown in /home/zumb/Documents/HHsite/ALPHA_VERSION/public/index.php on line 4
目录结构
- public
- index.php
- src
- Router.php
- vendor
- altorouter
- composer
- autoload.php
- views
- tableau.php
- composer.json
- composer.lock
相关代码
index.php
<?php require '../vendor/autoload.php'; $router = new App\Router(dirname(__DIR__) . DIRECTORY_SEPARATOR . 'views'); $router ->get('', 'tableau', '') ->get('/blog/category', 'category/show', 'category') ->run();
src/Router.php
<?php namespace App; class Router { /** * @var string */ private $viewPath; /** * @var AltoRouter */ private $router; public function __construct(string $viewPath) { $this->viewPath = $viewPath; $this->router = new \AltoRouter(); } public function get(string $url, string $view, ?string $name = null) { $this->router->map('GET', $url, $view, $name); return $this; } public function run() { print "hey"; $match = $this->router->match(); $view = $match['target']; ob_start(); require $this->viewPath . DIRECTORY_SEPARATOR . $view . '.php'; $content = ob_get_clean(); require $this->viewPath . DIRECTORY_SEPARATOR . 'layouts/default.php'; return $this; } }
composer.json
{ "autoload": { "psr-4": { "App\\": "src/" } }, "require": { "altorouter/altorouter": "^2.0" } }
修复步骤
使用绝对路径引入autoload.php
替换index.php中的相对路径引入,避免环境路径差异导致的问题:require __DIR__ . '/../vendor/autoload.php';重新生成优化版自动加载映射
执行以下命令,强制Composer重新生成并优化类映射文件:composer dump-autoload -o检查文件名大小写(Linux/macOS环境)
确认src目录下的文件名为Router.php(首字母大写),Linux和macOS系统严格区分文件名大小写,若文件名为小写router.php会导致PSR-4自动加载无法匹配。验证Composer自动加载配置
打开vendor/composer/autoload_psr4.php,确认存在以下配置项:'App\\' => array($baseDir . '/src'),若不存在,执行
composer install重新安装依赖并生成自动加载文件。
内容的提问来源于stack exchange,提问作者zumb
相关产品推荐
相关产品推荐

