【问题标题】:Codeigniter template library and HMVC ( mx library ) the static method run()Codeigniter 模板库和 HMVC(mx 库)静态方法 run()
【发布时间】:2012-05-03 22:04:42
【问题描述】:

我有这个正在使用的测试代码.. 我有一个名为 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 中的构建函数试图在ms 视图文件夹而不是test 视图文件夹中找到index 视图文件。 我检查了$this-&gt;_module,它给了我ms 模块名称.. 任何人都知道如何解决这个问题??

【问题讨论】:

    标签: codeigniter codeigniter-2 hmvc


    【解决方案1】:

    由于test 模块是在ms 的上下文中调用的,所以$this-&gt;template-&gt;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);
    

    【讨论】:

    • 这行得通,但var_dupm($t) 的输出结果是string '' (length=0),即使在日志中它会加载您提到的视图.. 但如果我使用$this-&gt;load-&gt;view() 它会输出把视图文件的内容..
    • 我之前删除了我的回答中谈到这个问题的部分,我只是把它重新编辑了进去,但我不确定我是否完全理解你仍然有什么问题。
    • 即使我只是使用Modules::run 直接输出测试/索引视图的数据,它也不会输出任何内容..您的代码也输出为string '' (length=0) .. 是的了解我的问题.. 它的构建函数从test 模块中没有输出任何内容,并且只是在您使用模板库时注意Moudles::run 的输出可以分配给一个var,它不会直接输出数据到页面
    【解决方案2】:

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

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

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

      $buffer = ob_get_clean();

    3. 增加如下:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      相关资源
      最近更新 更多