Я создаю приложение в Codigniter с HMVC. В нем я называю модуль внутри другого контроллера. Проблема, с которой я столкнулся, заключается в попытке передать / получить данные, загруженные в модуль. В частности, я загружаю некоторые файлы 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();
...
}
Я знаю, что могу получить данные [‘js’] в module_view как $ js, но мне интересно, могу ли я просто передать данные непосредственно в контроллер.
Я хотел бы получить данные от модуля к вызывающему контроллеру.
Да, вы можете сделать это с 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));
}
...
}
в вызываемый модуль вы бы написать что-то вроде этого:
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);
Но в этом случае вы не можете получить переменные, только буферизированный вывод (например, загруженные и обработанные файлы представления или отраженные операторы).
Других решений пока нет …