【问题标题】:running CodeIgniter script via CLI - CI super object methods missing通过 CLI 运行 CodeIgniter 脚本 - 缺少 CI 超级对象方法
【发布时间】:2011-11-01 00:32:06
【问题描述】:

我有一个 CodeIgniter 项目,我想通过 CLI 调用我的控制器方法之一,但似乎缺少附加到 CI 超级对象的常规属性和方法?

例如,运行以下在正常 http 请求期间运行良好的脚本会产生错误:

class Worker extends MY_Controller {

    public function __construct() {
        if(php_sapi_name() !== 'cli') {
            show_404();
        }
    }

    public function test(){

        $this->load->library('some_library');

    }
}

这是通过 CLI 返回的错误

  <div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Notice</p>
<p>Message:  Trying to get property of non-object</p>
<p>Filename: controllers/worker.php</p>
<p>Line Number: 21</p>

</div>PHP Fatal error:  Call to a member function library() on a non-object in /Users/casey/Documents/workspaces/vibecompass_live/application/controllers/worker.php on line 21

Fatal error: Call to a member function library() on a non-object in /Users/casey/Documents/workspaces/vibecompass_live/application/controllers/worker.php on line 21

我这样调用脚本: $ php index.php worker 测试

编辑

另外,这个脚本:

class Worker extends MY_Controller {

    public function __construct() {
        if(php_sapi_name() !== 'cli') {
            show_404();
        }
    }

    public function test(){

        $CI =& get_instance();
        var_dump($CI); die();

        $this->load->library('some_library');

    }
}

返回:NULL

【问题讨论】:

    标签: php codeigniter command-line-interface gearman worker


    【解决方案1】:

    看来你还没有初始化父类,在你的控制器构造函数中,也调用了父构造函数:

    class Worker extends MY_Controller {
    
        public function __construct() {
            parent::__construct();
            if(php_sapi_name() !== 'cli') {
                show_404();
            }
        }
    

    【讨论】:

    • 我想扇自己耳光。谢谢。类似的问题,我只是没想到。
    猜你喜欢
    • 2011-08-09
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多