通过CLI访问控制器时清空$this对象


Empty $this object when accessing a controller via CLI

我正在CodeIgniter中进行Cron作业,我需要访问我的模型才能执行它的任务。这是我的控制器代码。

<?php
/**
* 
*/
class Cron extends CI_Controller
{
    function __construct() {
        if ( PHP_SAPI !== 'cli' ) exit('No web access allowed');
    }
    public function send_mail() {
        $this->load->model("mail_model");
        foreach ($this->mail_model->cron_job() as $mail) {
            echo $mail->id;
        }
    }
}

如果我使用以下命令使用CLI调用send_mail函数:

php /home/path/to/project/index.php cron send_mail

它返回此错误:

Message:  Undefined property: Cron::$load
PHP Fatal error:  Call to a member function model() on null in /home/path/to/project/application/controllers/cron.php on line 12

如果我var_dump($this),它会返回一个空对象,所以我很困惑,因为它正在扩展CI_Controller。有什么想法吗?

错误说,空的是$this->load,而不是$this。检查$this->load是如何初始化的。

编辑您的构造函数:

function __construct() {
    if ( PHP_SAPI !== 'cli' ) exit('No web access allowed');
    parent::__construct();
}