CLI 中的 Codeigniter HMVC:未进入控制器
Posted
技术标签:
【中文标题】CLI 中的 Codeigniter HMVC:未进入控制器【英文标题】:Codeigniter HMVC from CLI: not entering controller 【发布时间】:2016-07-21 12:33:06 【问题描述】:我正在尝试从 CLI 运行代码,就像 CI 文档中所说的那样,但由于某种原因,可能是因为使用了 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 中有一个覆盖的 Session 库 MY_Session,它可以在浏览器中完美运行。如果我将此文件向上移动一个目录,此错误将不会再次显示在控制台中,但它不会在浏览器中工作。顺便说一下,它是自动加载的。
我完全不喜欢的解决方法:在两个位置复制同一个文件。
下一个错误:
PHP 致命错误:在第 196 行的 /home/mysite/public_html/system/core/Common.php 中找不到类“CI_Preferencias”
我有一个名为 Preferencias 的自定义库,它也是自动加载的,位于 application/libraries/Preferencias.php 中
同样,这在浏览器中完美运行。但是,从 CLI 似乎搜索了一个不存在的 CI_Preferencias 库。如果我将其重命名为 CI_Preferencias,并自动加载“CI_Preferencias”,CI 将在 CLI 中搜索名为 CI_CI_Preferencias 的类。
我不确定我是否遗漏了什么,或者 CI 中存在实际错误,或者 HMVC 模块有问题。
谁能帮帮我??这让我抓狂,因为我必须使用从 cronjobs 安排的 CLI 操作,而我完全迷失了方向。
【问题讨论】:
我认为是因为您在应用程序控制器中有 HMVC 而不是在模块中application/modules/your_module_name/controllers/Cron.php
@wolfgang1983:如果我将控制器放在模块中,Codeigniter 的 CLI 语法是什么?我试过没有成功。无论如何,模块外部的控制器,在其原始位置,仍应使用 HMVC 扩展工作,就像通过 Web 服务器运行时一样。
上面评论的是我,用我的个人账户(不是我在工作中使用的)
class Cron extends MX_Controller
。根据你对MY_Session
的描述,应该是MX_Controller
还是MY_Controller
?
@bishop:我不明白你的问题。 HMVC 模块通过添加某种附加层来扩展 CI 结构,用 MX_Controller 表示。所有控制器都从它扩展,通过一个名为 MY_Controller 控制器的中间控制器。
【参考方案1】:
如果您在配置文件中添加了 subclass_prefix 为“$config['subclass_prefix'] = 'MY_';
”。尝试 MY_Preferencias.php 而不是 Preferencias.php
如果你没有使用 $config['subclass_prefix'] = 'MY_';并将会话库调用为 $this->load->library('session');它采用 CI 的本机会话库而不是您的自定义 MY_Session.php
Here is the link
【讨论】:
【参考方案2】:我觉得你应该加constructor
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);
我没有测试过代码。试试看吧。
【讨论】:
以上是关于CLI 中的 Codeigniter HMVC:未进入控制器的主要内容,如果未能解决你的问题,请参考以下文章
插入批处理,如果在Codeigniter 3 HMVC中有重复的密钥更新
CodeIgniter:关于 HMVC 和 Views 的一些疑惑