2012-05-03 47 views
2

我有我的工作与这种测试代码.. 我有一个模块调用ms并和另外一个叫testtest控制器代码:笨模板库和HMVC(MX库)的静态方法run()的

<?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视图文件中的ms views文件夹不是test views文件夹.. 我检查了$this->_module,它给我的ms模块名称.. 任何一个知道如何解决这个问题?

回答

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); 
+0

多数民众赞成工作,但该放出来的'var_dupm($ t)的结果是''字符串“”(长= 0)',即使在日志中它加载视图,因为你提到..但如果我使用'$ this-> load-> view()'它会把视图文件的内容。 – zaherg

+0

我以前删除了我谈到的那部分答案,我只是重新编辑了它,但我不确定我完全理解你还有什么问题。 –

+0

即使我只是直接使用'Modules :: run'输出测试/索引视图的数据,它将不会输出任何内容..并且您的代码也会输出'string''(length = 0)'..是的,你明白我的问题..它的构建函数没有输出任何'test'模块,只是当你使用模板库'Moudles :: run'的输出可以分配给一个变种它不会将数据直接输出到页面 – zaherg

0

你可以试着改变所述module.php run方法

下面的例子是我必须使用fix溶液:

  1. 打开THIRD_PARTY/M X/Modules.php
  2. 近75行找

    $缓冲液= ob_get_clean();

  3. 增加其以下:

    如果($输出=== NULL & & $缓冲=== ''){$ 输出= CI :: $ APP->输出 - > get_output() ; }

在这个时候,它应该能够正常工作......