安装endroid/qr-code后CodeIgniter4运行php spark serve报错如何修复
问题现象
从endroid的GitHub仓库安装qr-code库后,执行php spark serve命令启动服务时抛出如下致命错误:
Fatal error: Uncaught TypeError: Argument 1 passed to CodeIgniter\CLI\Console::__construct() must be an instance of CodeIgniter\CodeIgniter, int given, called in D:\Kuliah\Magang\akses-log-data-center-itb\spark on line 49 and defined in D:\Kuliah\Magang\akses-log-data-center-itb\vendor\codeigniter4\framework\system\CLI\Console.php:29 Stack trace: #0 D:\Kuliah\Magang\akses-log-data-center-itb\spark(49): CodeIgniter\CLI\Console->__construct(1) #1 {main} thrown in D:\Kuliah\Magang\akses-log-data-center-itb\vendor\codeigniter4\framework\system\CLI\Console.php on line 29
排查修复方案
- 先明确根因:错误明确说明
spark文件第49行给Console构造方法传入了int类型值1,而非要求的CodeIgniter\CodeIgniter实例,本质是类加载规则、依赖版本或者启动文件被破坏导致的实例化失败。 - 检查qr-code安装方式:如果是直接从GitHub下载源码手动引入qr-code库,立刻删除手动添加的qr-code相关文件,改用composer执行
composer require endroid/qr-code走官方流程安装,手动引入文件很容易破坏CI4的自动加载规则,触发类加载异常。 - 校验依赖兼容性:执行
composer check-platform-reqs检查所有依赖的版本约束是否冲突,重点确认安装qr-code时有没有强制降级/升级codeigniter4/framework、psr/*相关核心依赖,版本不兼容会直接导致核心类实例化失败返回错误状态码。如果存在依赖冲突,安装对应兼容版本的qr-code即可,不要加--ignore-platform-req参数强制忽略版本依赖安装。 - 重置自动加载与缓存:执行
composer dump-autoload重新生成全量类自动加载映射文件,再清空writable/cache目录下的所有缓存文件,排除自动加载缓存错乱导致的类引用异常。 - 校验启动文件完整性:打开项目根目录的
spark文件,核对第49行附近的代码,同版本CI4的原生spark文件这里应该传入已经初始化完成的CodeIgniter实例,如果文件被篡改、或者被旧版本/其他项目的spark文件覆盖,直接替换为当前CI4版本对应的官方原生spark文件即可。 - 核对PHP运行版本:执行
php -v查看当前CLI模式下的PHP版本,确保版本同时满足CI4框架和所安装qr-code版本的最低要求,PHP版本不匹配也会导致类解析失败返回错误状态码。
内容的提问来源于stack exchange,提问作者Fathya
相关产品推荐
相关产品推荐

