升级后控制器找不到是因命名空间与路径不匹配——5.1强制psr-4规范,要求路径为app/controller/、命名空间为appcontroller,大小写及斜杠方向严格敏感,且必须执行composer dump-autoload -o并清空runtime缓存。

升级后控制器找不到,基本是命名空间与路径不匹配导致的——5.1 强制 PSR-4 规范,不再容忍 applicationcontroller 这类模糊写法,必须严格为 appcontroller,且大小写、斜杠方向、末尾空格全敏感。
确认控制器文件路径是否为 app/controller/
5.0 默认用 application/ 目录,5.1 默认改用 app/。如果你没在 config/app.php 中显式配置 'app_path' => 'application/',框架就只扫描 app/ 下的文件。
- 检查真实路径:控制器文件必须在
app/controller/Index.php,不是application/controller/Index.php,也不是App/Controller/Index.php - Linux 服务器上,
Index.php和index.php是两个文件,务必与代码中引用的大小写完全一致 - 若坚持用
application/,需在config/app.php中补全配置:'app_path' => 'application/',并同步修正composer.json中的 autoload
检查命名空间声明是否为 appcontroller
文件顶部 namespace 必须与目录结构严格对应,反斜杠不能写成正斜杠,不能多空格、不能首字母大写。
- 正确写法:
namespace appcontroller; - 错误示例:
namespace applicationcontroller;(5.0 兼容但 5.1 拒绝)、namespace app/controller;(正斜杠)、namespace AppController;(大小写错)、namespace appcontroller ;(末尾空格) - 调用处的
use语句也必须一致,例如use appcontrollerIndex;,漏掉app或写成AppControllerIndex都会崩
重刷 Composer 自动加载并清空 runtime
composer dump-autoload -o 不是可选项,是必做动作;runtime 缓存不清理,新规则根本不会生效。
- 打开
composer.json,确认 autoload 区块为:"psr-4": {"app\": "app/"}(注意双反斜杠转义) - 删掉
vendor/composer/autoload_*.php文件,或直接删整个vendor/composer/目录 - 执行
composer dump-autoload -o - 删除
runtime/下全部内容(包括cache/、log/、temp/),不能只删某一项
验证 autoload_psr4.php 是否映射正确
生成后的自动加载映射文件才是最终“路标”,不看它等于没验证。
- 打开
vendor/composer/autoload_psr4.php - 搜索
app\,确认其值指向的是项目根目录下的app/(如/var/www/project/app/),而不是application/或其他路径 - 如果没找到
app\键,说明composer.json配置未生效或路径拼写有误
最容易被忽略的是 runtime 缓存和 autoload_psr4.php 的实际内容——改完命名空间、路径、composer.json 后,只要这两处没清或没更新,报错就会原样复现,跟代码本身无关。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











