You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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"
    }
}

修复步骤

  1. 使用绝对路径引入autoload.php
    替换index.php中的相对路径引入,避免环境路径差异导致的问题:

    require __DIR__ . '/../vendor/autoload.php';
    
  2. 重新生成优化版自动加载映射
    执行以下命令,强制Composer重新生成并优化类映射文件:

    composer dump-autoload -o
    
  3. 检查文件名大小写(Linux/macOS环境)
    确认src目录下的文件名为Router.php(首字母大写),Linux和macOS系统严格区分文件名大小写,若文件名为小写router.php会导致PSR-4自动加载无法匹配。

  4. 验证Composer自动加载配置
    打开vendor/composer/autoload_psr4.php,确认存在以下配置项:

    'App\\' => array($baseDir . '/src'),
    

    若不存在,执行composer install重新安装依赖并生成自动加载文件。

内容的提问来源于stack exchange,提问作者zumb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:33:24