Php 通过CLI访问控制器时清空$this对象
我在CodeIgniter中做一个Cron工作,我需要访问我的模型以执行它的任务。这是我的控制器代码Php 通过CLI访问控制器时清空$this对象,php,codeigniter,cron,command-line-interface,php-5.6,Php,Codeigniter,Cron,Command Line Interface,Php 5.6,我在CodeIgniter中做一个Cron工作,我需要访问我的模型以执行它的任务。这是我的控制器代码 <?php /** * */ class Cron extends CI_Controller { function __construct() { if ( PHP_SAPI !== 'cli' ) exit('No web access allowed'); } public function send_mail() { $t
<?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;
}
}
}
它返回以下错误:
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\u dump($this)
它返回一个空对象,因此我感到困惑,因为它正在扩展CI\u控制器。
有什么想法吗?错误说,什么是空的$this->load
,而不是$this
。
检查如何初始化$this->load
编辑您的构造函数:
function __construct() {
if ( PHP_SAPI !== 'cli' ) exit('No web access allowed');
parent::__construct();
}
它扩展了CI_控制器,但CI_控制器代码在哪里?我没有看到include()或require()。@Octopus如何包含CI_控制器代码?在代码顶部附近,您可能需要这样一行:require_once('path/to/fileCI_Controller.php')
,但我不确定该文件是否已经包含在某个WEHRE中,并且该Cron文件随后也包含在其中<代码>require_once()
、require()
、include_once()
和include()
都是非常类似的函数,但有细微的差别,您应该检查您的引用以查看差别。尝试过“require'../system/core/Controller.php'并返回“找不到文件”错误。“$this”对象中没有“load”方法。这就是var_转储返回的结果。对象(Cron)#11(0){}您的代码试图使用$this
的属性load
:`$this->load->model(“邮件模型”);'是的,该属性应该在$this对象中,它是从CI_控制器类继承的。我无法在CLI中访问它的属性。我看到了在CI_控制器的构造函数中初始化的load
:。因此,添加parent::u construct()它现在不会返回错误,但是如果我调用“send_mail()”函数,它不会输出任何内容。
function __construct() {
if ( PHP_SAPI !== 'cli' ) exit('No web access allowed');
parent::__construct();
}