我正在使用HMVC在Codigniter中构建应用程序。在其中我调用另一个控制器内的模块。我遇到的问题是尝试传递/检索加载到模块中的数据。具体来说,我正在加载一些我想要传递给调用控制器的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,但我想知道我是否可以直接将数据传递给控制器。
答案 0 :(得分:0)
我想做的是从模块获取数据到调用控制器
是的,你可以用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);
但在这种情况下,您无法获取变量,只能获取缓冲输出(如加载和处理的视图文件或回显语句)。