直接在旧项目跑 composer install 会失败,因 Legacy 项目无 composer.json、无命名空间、类名含下划线,PHP 报 Cannot declare class 或 Class not found;必须用 classmap 配真实路径(不带尾斜杠)、vendor/autoload.php 置入口第一行、删旧 require、纯函数进 files 字段、增删文件后重跑 dump-autoload -o。

直接在旧项目里跑 composer install 会失败,因为 Legacy 项目没有 composer.json、没有命名空间、类名用下划线(如 User_model),PHP 会报 Cannot declare class User_model 或 Class not found——这不是 Composer 配置错了,而是加载顺序和机制根本对不上。
classmap 自动加载必须配真实路径且不带尾部斜杠
Legacy 类文件散落在 application/models/、includes/ 这类目录里,不能用 PSR-4。必须用 classmap,但路径写错就白搭:
-
"application/models/"❌ 某些 Composer 版本会扫描失败 -
"application/models"✅ 必须去掉末尾斜杠 - 路径必须真实存在,哪怕目录为空,
composer dump-autoload -o也会报错退出 - 多个目录用数组列出:
"classmap": ["application/models", "application/libraries", "includes"]
vendor/autoload.php 必须是入口文件第一行
旧项目常见启动逻辑是先 require 'config.php' 再 require 'user_model.php',这会导致类被提前声明,Composer 的 classmap 彻底失效:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 把
require __DIR__ . '/vendor/autoload.php';放到index.php最顶部,一行都不能换 - 所有旧的
require和include全部删掉或注释掉 - 如果某些文件是纯函数(比如
helpers/common_helper.php),改用"files"字段加载,它不走类声明检查 - 别把
vendor/autoload.php套在if (ENV === 'dev')里,生产环境一跑就崩
每次增删 PHP 文件都得手动重跑 dump-autoload
classmap 不是实时监听文件系统,它只在执行 composer dump-autoload -o 时生成一次 vendor/composer/autoload_classmap.php:
- 加了新模型
Product_model.php?删了旧工具类String_helper.php?必须重跑 -
-o参数生成优化版映射,支持无命名空间类;不加-o时部分旧版本可能 fallback 到慢速 autoload - 验证是否生效:写个临时脚本
var_dump(class_exists('User_model'));,返回true才算成功 - 别依赖
composer install——你还没require任何包,它只会报 “No composer.lock file present”
纯函数文件必须进 files 字段,不能塞 classmap
像 database.php、url_helper.php 这种定义一堆全局函数的文件,放进 classmap 不仅无效,还会让 dump-autoload -o 报警告甚至中断:
- 单独拎出来,写进
"files"数组:"files": ["config/database.php", "helpers/url_helper.php"] -
files里的文件会在vendor/autoload.php被引入时立即执行,等价于require_once - 如果旧框架自己写了
autoload函数(比如navdao.php),别删它,把它挪进files列表,统一走 Composer 加载链 - 确保这些文件里没有重复的函数声明,否则 PHP 会 fatal error
最容易被忽略的是:classmap 路径校验和 vendor/autoload.php 的加载时机不是“配置完就自动生效”,而是每一步都强依赖人工干预和顺序控制——少一个 -o、多一个斜杠、早一行 require,整个桥接就断在看不见的地方。

















