Codeigniter模板库和HMVC(mx库)的静态方法run()

时间:2012-05-03 22:04:42

标签: codeigniter codeigniter-2 hmvc

我有这个测试代码正在使用.. 我有一个名为ms的模块,另一个名为test的模块 test控制器代码为:

<?php
class Test extends MX_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->template->title($this->config->item('site_name','app'));
    }

    public function index()
    {
        $this->template->build('index');
    }
}

并且ms内的代码是:

<?php
//ms module
class Msrofi extends MX_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->template->title($this->config->item('site_name','app'));
    }

    public function index()
    {
        $t = Modules::run('test/test/index');
        var_dump($t);
        $this->template->build('index_message');
    }
}

问题是test内的构建函数试图在index views文件夹中找到ms视图文件,而不是test views文件夹。 我检查了$this->_module,它给了我ms模块名称.. 任何人都知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

由于test模块的上下文中正在调用ms模块,$this->template->build()正在ms模块中查找视图文件。与跨模块加载模型和库的方式相同,您也必须为视图路径执行此操作:

class Test extends MX_Controller {

    public function index()
    {
        // This path works only from the "test" module
        // $this->template->build('index');

        // This path works from any module
        $this->template->build('test/index');
    }
}

在模块本身中显式调用模块路径可能有点烦人,但是跨模块依赖性首先会破坏模块化的一些目标。

快速放弃:Modules::run()输出未返回,但直接回显,因此您无法在不使用输出缓冲区的情况下将其分配给变量或print_r / var_dump:< / p>

ob_start();
Modules::run('test/test/index');
$t = ob_get_clean();
var_dump($t);

答案 1 :(得分:0)

您可以尝试更改module.php的run方法

以下示例是我必须使用修复解决方案:

  1. 打开third_party / MX / Modules.php
  2. 找到近75行

    $ buffer = ob_get_clean();

  3. 增加以下内容:

    if($ output === NULL&amp;&amp; $ buffer ===''){ $ output = CI :: $ APP-&gt; output-&gt; get_output(); }

  4. 此时,它应该能够正常工作......