使用Codeigniter4上传文件报Call to a member function library() on null错误
错误原因排查与修复方案
核心错误原因
- 你混淆了CodeIgniter 3和CodeIgniter 4的语法:
$this->load->library()是CI3的类库加载方式,CI4已经完全移除了这套加载逻辑,因此$this->load本身就是null值,调用它的library()方法自然触发报错。 - 你的自定义控制器构造方法没有调用父类的构造函数,CI4控制器的自定义构造方法必须优先执行
parent::__construct(),否则框架核心初始化的属性都会缺失。
修复步骤
1. 修正控制器构造方法
先修改你的构造函数,补全父类构造调用:
public function __construct() { // 必须先调用父类构造完成框架初始化 parent::__construct(); $this->panduan_model = new \App\Models\M_Panduan(); }
2. 替换为CI4标准的文件上传逻辑
CI4不需要提前加载上传类,直接从请求实例中获取上传文件处理即可,修改你的testing方法代码如下:
public function testing() { $file_name = 'tes'; // 上传路径注意和实际目录结构匹配,提前确保目录有服务器可写权限 $upload_path = FCPATH.'/public/assets-menu/file/upload/panduan/'; // 从请求中获取上传的文件 $file = $this->request->getFile('file'); // 验证文件是否上传成功、是否是合法PDF if ($file->isValid() && !$file->hasMoved() && $file->getClientMimeType() == 'application/pdf') { // 移动文件到指定目录,第三个参数设为true表示覆盖同名文件 $file->move($upload_path, $file_name.'.pdf', true); print_r('ok'); // 上传后的文件信息可以通过$file->getName()等方法获取 } else { print_r('error'); // 可以通过$file->getErrorString()获取具体错误信息用于排查 } }
补充说明
你当前的视图代码除了form标签闭合位置不规范(form在modal-body内开启,却在modal-footer外闭合),其余上传相关配置是正常的,不需要额外修改。
内容的提问来源于stack exchange,提问作者Sami Aji
相关产品推荐
相关产品推荐

