Php 来自CLI的Codeigniter HMVC:未进入控制器

Php 来自CLI的Codeigniter HMVC:未进入控制器,php,codeigniter,codeigniter-3,codeigniter-hmvc,Php,Codeigniter,Codeigniter 3,Codeigniter Hmvc,正如CI文档中所述,我正在尝试从CLI运行代码,但由于某些原因,可能因为使用了HMVC扩展,它不会进入指定的控制器 我在HMVC扩展站点中没有找到有关CLI执行的其他文档 有人知道怎么处理吗 代码如下: /** * application/controllers/Cron.php * This is just a wrapper controller to use an HMVC module using the basic CLI syntax for CI * */ class Cr

正如CI文档中所述,我正在尝试从CLI运行代码,但由于某些原因,可能因为使用了HMVC扩展,它不会进入指定的控制器

我在HMVC扩展站点中没有找到有关CLI执行的其他文档

有人知道怎么处理吗

代码如下:

/**
 * application/controllers/Cron.php
 * This is just a wrapper controller to use an HMVC module using the basic CLI syntax for CI
 *
 */
class Cron extends MX_Controller
{

    public function generatepdfs($start_date = null, $end_date = null)
    {       
            echo 'Not reached'; exit;

            $this->load->module('facturation/documentscontroller');

            $this->documentoscontroller->generatepdfs($start_date, $end_date);
    }
}
无论我是否从文档根目录运行此操作:

php index.php cron generatepdfs
或者这个:

/usr/bin/php -f /home/user/public_html/index.php cron generatepdfs
它不会显示“未到达”

如果我从浏览器运行它,它会运行

以下是一些输出到控制台的错误:

找不到指定的类:Session.php

我在application/libraries/Session/MY_Session.php中有一个覆盖的会话库MY_Session,它在浏览器中工作得非常好。如果我将此文件向上移动一个目录,此错误将不会在控制台中再次显示,但在浏览器中不起作用。顺便说一下,它是自动装弹的

对此我一点也不喜欢的解决方法是:在两个位置复制相同的文件

下一个错误:

PHP致命错误:在第196行的/home/mysite/public\u html/system/core/Common.PHP中找不到类“CI\u Preferencias”

我在application/libraries/Preferencias.php中有一个名为Preferencias的自定义库,它也是自动加载的

同样,这在浏览器中也非常有效。然而,从CLI中,它似乎在搜索一个不存在的CI_Preferencias库。如果我将其重命名为CI_Preferencias,并自动加载“CI_Preferencias”,CI将从CLI中搜索名为CI_CI_Preferencias的类

我不确定我是否遗漏了什么,或者CI中存在实际的bug,或者HMVC模块正在处理它


有人能帮我吗??这让我抓狂,因为我必须使用cronjobs安排的CLI操作,我感到完全不知所措。

如果您在配置文件中添加了subclass_前缀作为“
$config['subclass_prefix']='MY_u';
”。请尝试MY_Preferencias.php而不是Preferencias.php

如果您没有使用$config['subclass_prefix']='MY_';并将会话库调用为$this->load->library('session');它使用的是CIs本机会话库,而不是自定义的MY_session.php


我认为您应该添加
构造函数

class Cron extends MX_Controller
{

    public function __construct() {
       parent::__construct();
       // Any conditions/triggers while constructor loads.
    }

    public function generatepdfs($start_date = null, $end_date = null)
    {       
            echo 'Not reached'; exit;

            $this->load->module('facturation/documentscontroller');

            $this->documentoscontroller->generatepdfs($start_date, $end_date);
    }
}

我还没有测试代码。试一试。

我想,因为您在应用程序控制器中有HMVC,而不是在模块中
应用程序/模块/your_module_name/controllers/Cron.php
@wolfgang1983:如果将控制器放在模块中,Codeigniter的CLI语法是什么?我试过了,但没有成功。无论如何,模块外的控制器,在其原始位置,应该仍然使用HMVC扩展工作,就像在web服务器上运行时一样。上面的注释是我,我的个人帐户(不是我在工作中使用的帐户)
class Cron extensed MX_Controller
。根据你对
MY_Session
的描述,那应该是
MX_Controller
还是
MY_Controller
?@主教:我不明白你的问题。HMVC模块通过添加一个附加层(用MX_控制器表示)来扩展CI结构。所有控制器都从它扩展,通过一个称为MY_控制器的中间控制器。