You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter 3集成PHPMailer失败 调用load()方法报空对象错误

CodeIgniter 3集成PHPMailer报Call to a member function load() on null修复方案

核心报错原因

报错本质是$this->Phpmailer_library没有被成功实例化、值为null,常见诱因有两个:一是模型重写构造方法时未调用父类构造函数,导致CI框架加载器未正常初始化;二是composer自动加载路径配置错误、类文件加载逻辑冗余。

分步修复操作

1. 补全模型构造函数的父类调用

CI3中自定义模型如果重写__construct方法,必须先调用父类CI_Model的构造方法,否则框架的资源加载、超级对象挂载逻辑都不会执行,之前写的$this->load->library()实际上没有生效。
修正后的SendEmail模型构造方法代码:

public function __construct(){  
    parent::__construct(); // 必须新增该行,放在所有业务逻辑之前
    $this->load->library('Phpmailer_library');
}

2. 修正composer自动加载路径配置

当前composer自动加载的路径配置错误:配置项$config['composer_autoload']的相对路径默认以项目入口文件index.php所在目录为根,你将vendor目录放在了application文件夹下,所以要改成绝对路径匹配。
打开application/config/config.php,修改对应配置为:

$config['composer_autoload'] = APPPATH . 'vendor/autoload.php';

修改完成后在项目根目录执行命令重新生成自动加载映射:

composer dump-autoload

3. 简化自定义类库的加载逻辑

开启composer自动加载后,不需要手动require_once引入PHPMailer的源文件,直接通过命名空间实例化即可,避免重复加载、路径错误问题。
修正后的application/libraries/Phpmailer_library.php代码:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

class Phpmailer_library
{
    public function __construct()
    {
        log_message('Debug', 'PHPMailer class is loaded.');
    }

    public function load()
    {
        $objMail = new PHPMailer(true);
        return $objMail;
    }
}

校验注意事项

  • 类库文件名严格和类名大小写保持一致,Linux服务器环境下文件名大小写敏感,Phpmailer_library.php不能随意改大小写
  • 修改完成后可以先在调用处打印var_dump($this->Phpmailer_library),确认返回类实例而非null后,再调用load()方法
  • 如果仍加载失败,检查application/vendor/phpmailer目录是否完整,缺文件的话重新执行composer require phpmailer/phpmailer安装依赖即可

内容的提问来源于stack exchange,提问作者Jose Rizal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:15:30