我使用WireDesignz HMVC并使用CodeIgniter 3.0.6拥有一个KERNEL_Controller(实际上是带有另一个前缀的MY_Controller)
class KERNEL_Controller extends MX_Controller {
public $myvar;
public function __construct() {
parent::__construct();
//Load core Model
$this->load->model('Core_model');
$this->myvar = 'test';
}
}
现在我有一个Helper,它执行以下操作
function Editor($id) {
$ci =& get_instance();
echo $ci->myvar;
}
当我在视图中调用编辑器时,我得到了
Severity: Notice
Message: Undefined property: CI::$myvar
Filename: helpers/editor_helper.php
在编辑助手
中调用方法时相同在KERNEL_Controller中我有
public function DoTest() {
echo '1';
}
在Editor_helper中
function Editor($id) {
$ci =& get_instance();
echo $ci->DoTest();
}
我在视图中调用编辑器时得到了
Type: Error
Message: Call to undefined method CI::DoTest()
但是当我在编辑助手中调用模型时
function Editor($id) {
$ci =& get_instance();
$result_content = $ci->Core_model->GetLanguages(1);
print_r($result_content);
}
我确实得到了(在这种情况下)一个包含语言的数组。
答案 0 :(得分:1)
哦,是的!!我是男人,我修好了!考虑可能创建我自己的“get_instance()系统,这就是我所做的:
class MY_Controller extends MX_Controller
{
public static $instance;
function __construct()
{
self::$instance || self::$instance =& $this;
...
}
}
然后在图书馆,帮助者或任何时髦的地方你需要使用它:
$CI =& MY_Controller::$instance;
请注意,如果您自动加载库,MY_Controller :: $ instance将无法正常工作,如果它位于库的__construct()中,因为尚未定义MY_Controller
答案 1 :(得分:0)
根据https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc,您必须使用类似
的内容<?php
/** module and controller names are different, you must include the method name also, including 'index' **/
modules::run('module/controller/method', $params, $...);
/** module and controller names are the same but the method is not 'index' **/
modules::run('module/method', $params, $...);
/** module and controller names are the same and the method is 'index' **/
modules::run('module', $params, $...);
/** Parameters are optional, You may pass any number of parameters. **/
我不知道您的模块是如何调用的,但您可以尝试
modules::run('module/KERNEL/DoTest');
以便调用DoTest
控制器的方法KERNEL
。