Codeigniter HMVC 将数据从模块传递到控制器

Codeigniter HMVC pass data from module to controller

我正在使用 HMVC 在 Codigniter 中构建应用程序。我在其中调用另一个控制器内的模块。我 运行 遇到的问题是试图 pass/retrieve 将数据加载到模块中。具体来说,我正在加载一些 javascript 文件,然后我想将这些文件传递给调用控制器。

这是一个简化的代码:

public function module()
{
    ...
    $this->data['js'] = $this->js_assets;
    ...
    return $this->load->view('module_view', $this->data, true);
}

public function controller()
{
    ...

    $this->load->module('module/module');
    $this->data['module'] = $this->module->module();

    ...
}

我知道我可以在 module_view 中检索数据 ['js'] 作为 $js,但我想知道我是否可以直接将数据传递给控制器​​。

What I'd like to do is get data from the module to the calling controller

是的,您可以使用 HMVC 做到这一点。

在调用模块中你可以这样组织代码(伪代码):

class Someclass extends CI_Controller {
    ...
    public function show_page()
    {
        $this->load->module("module");
        $js_files = $this->module->get_js_files();
        $this->load->view("header", array("js_files" => $js_files));
    }
    ...
}

callee 模块中,您可以按照以下行编写内容:

class Module extends CI_Controller {
    ...
    public function get_js_files()
    {
        $scripts = $this->frontend_model->get_scripts();
        return $scripts;
    }
    ....
}

(尽管在这种幻想的情况下,首先从模型中获取数据会更明智)


另一种技术,就像@wolfgang1983 正确提到的那样,像这样调用另一个模块:

Modules::run('modulename/controller/function', $data);

为了从该控制器获取数据,您只需将返回的数据分配给一个变量:

$data_received = Modules::run('modulename/controller/function', $data);

但在这种情况下,您无法获取变量,只能获取缓冲输出(如加载和处理的视图文件或回显语句)。