我有这个测试代码正在使用..
我有一个名为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
模块名称..
任何人都知道如何解决这个问题吗?
答案 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方法
以下示例是我必须使用修复解决方案:
找到近75行
$ buffer = ob_get_clean();
增加以下内容:
if($ output === NULL&amp;&amp; $ buffer ===''){ $ output = CI :: $ APP-&gt; output-&gt; get_output(); }
此时,它应该能够正常工作......