2

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

<?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试图在views文件夹而不是views文件夹中找到index视图文件..我检查了它,它给了我模块名称..有人知道如何解决这个问题吗?mstest$this->_modulems

4

2 回答 2

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它而不使用输出缓冲区:

ob_start();
Modules::run('test/test/index');
$t = ob_get_clean();
var_dump($t);
于 2012-05-03T22:50:50.427 回答
0

你可以尝试改变module.php的run方法

下面的例子是我不得不使用的fix解决方案:</p>

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

    $buffer = ob_get_clean();

  3. 增加如下:</p>

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

这个时候应该可以正常工作了……

于 2012-10-26T05:35:48.983 回答