直接修改 app/Config/Autoload.php 配置 PSR-4 命名空间映射(如 $psr4['App\Libraries\'] = APPPATH . 'Libraries/')、$helpers 数组(如 ['url', 'my_custom'])和 $services(仅内置服务),并清除缓存、重启服务。

直接改 app/Config/Autoload.php,别碰 system/ 下的任何文件,否则升级必炸。
autoload.php 里怎么加自定义类路径
CodeIgniter 4 的自动加载靠的是 PSR-4 规范映射,不是传统 include。你得往 $psr4 数组里塞命名空间和物理路径的对应关系。
- 比如你想自动加载
AppLibrariesPaymentGateway,对应文件在app/Libraries/PaymentGateway.php,那就加一行:$psr4['AppLibraries\'] = APPPATH . 'Libraries/'; - 注意结尾斜杠和双反斜杠:路径末尾必须有
/,命名空间末尾必须是\(Windows 下尤其容易漏转义) - 别写成
APPPATH.'Libraries'—— 少了斜杠会导致类文件路径拼错,报Class not found
helper 和 service 怎么自动载入不报错
helper 文件不能用 PSR-4 加载,得走 $helpers 数组;service 同理要进 $services。这两类填错位置就完全不会生效,且无提示。
- 加 helper:把
'url'、'text'这种字符串直接塞进$helpers数组,例如$helpers = ['url', 'text', 'my_custom'];(对应app/Helpers/my_custom_helper.php) - 加 service:只支持框架内置 service 名(如
'cache'、'log'),自定义 service 必须手动注册到app/Config/Services.php,Autoload.php里填了也没用 - 常见错误:
$helpers = ['My_helper']—— 文件名必须是小写 +_helper.php,类名或变量名大小写不敏感,但文件名必须全小写,否则 Linux 环境下直接 404
修改后为什么没生效?缓存和环境的影响
CI4 默认启用配置缓存,改完 Autoload.php 不清缓存,等于白改。
- 开发环境执行:
php spark cache:clear或删掉writable/cache/下所有文件 - 如果用了
spark serve,改完记得重启服务 —— 它不会热重载配置文件 - 生产环境切记不要开
CI_ENVIRONMENT = production后还手动改 autoload,应先生成缓存再部署:php spark optimize - 检查是否误启用了
composer dump-autoload:CI4 不依赖 Composer 自动加载逻辑,混用会导致命名空间冲突或重复加载
最常被跳过的其实是命名空间声明和文件物理路径的一致性——写对了 autoload 配置,但类文件顶部没写 namespace AppLibraries;,或者路径里多了一层目录,问题就出在这儿,而不是配置本身。










