我脱掉了所有的头发......一直在搜索每一个帖子,如果有人能指出我的工作实例,我将不胜感激。
正在加载文档:https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc 我可以使用
调用另一个模块 - >控制器modules::run('module/controller/method', $params);
modules::load('module/controller/method', $params);
or
$this->load->module('module/controller');
$this->controller->method();
问题:永远不会调用“method()”。每次只调用控制器的构造函数。
目标是将自包含的MVC构建为模块并由其他控制器使用。 但无论我做什么,它只调用构造函数,方法不调用。 几个星期前我开始使用HMVC,我是否遗漏了文档中的某些内容,或者没有以这种方式使用它? 这是设置:
modules
|--ztest1
| |--controller/c1.php
|--ztest2
|--controller/c2.php
class C1 extends MX_Controller {
function __construct() {
parent::__construct();
}
function index () {
Modules::run('ztest2/c2/testc2/');
//Modules::load('ztest2/c2/testc2/');
//$this->load->module('ztest2/c2/testc2/');
//$this->c2->testc2();
}
}
class C2 extends MX_Controller {
function __construct() {
parent::__construct();
echo __FILE__." // ".__CLASS__."/".__FUNCTION__.PHP_EOL;
}
function testc2(){
echo __FILE__." // ".__CLASS__."/".__FUNCTION__.PHP_EOL;
}
}
output:
/app/modules/ztest2/controllers/c2.php // C2/__construct
附加说明:脚本没有错误或警告。它只是静静地调用构造函数。
答案 0 :(得分:20)
感谢MC的小费,我终于找到了原因。 HMVC doc确实缺少初学者的一些例子。
对于将来可能会找到此主题的任何人,请在此处正确使用:
to call module01/controller01/method00:
//method 1 CORRECT:
$ctlObj = modules::load('module01/controller01/');
$ctlObj->method00();
//or you could use chaining:
modules::load('module01/controller01/')->method00();
//method 1 WRONG:
modules::load('module01/controller01/method00'); //this will only load contructor
---
//method 2 CORRECT:
modules::run('module01/controller01/method00'); //no trailing slash!
//method 2 WRONG:
modules::run('module01/controller01/method00/');
---
//method 3 CORRECT:
$this->load->module('module01/controller01');
$this->controller01->method00();
我不明白为什么方法3在我第一次尝试时失败了......也许是因为我重启了HTTPD?
答案 1 :(得分:2)
这个HMVC适合我。我正在研究一个使用这个HMVC的项目。
只需编辑third_party/MX/Modules.php
,如下面的链接所示,并告诉我回复。
答案 2 :(得分:2)
我遇到了同样的问题。确保检查目录和控制器的大小写。对于模块和控制器名称之间的区别,它不区分大小写。
//In my case the below did not work
$this->load->module('dashboard/Dashboard');
$this->Dashboard->method();
//but
$this->load->module('dashboard');
$this->Dashboard->method();
//worked
答案 3 :(得分:1)
在尝试实现调用不在任何模块中的控制器之后。
Modules::run('../Controller/method');
答案 4 :(得分:0)
我也是CI的新手,我认为我遇到了同样的问题。脚本似乎没有运行。 (没有html输出)。
//This did NOT work (did not produce output)
modules::run('module_name/method_name',$data);
// but this DID work??? didn't know why
modules::run('module_name/method_name',$data);
exit();
// turns out you need the echo for output
echo modules::run('templates/login_template',$data);
这对你们很多人来说可能是显而易见的 - 但我浪费了两个小时寻找答案。
答案 5 :(得分:0)
所以根据文档,他们说将控制器复制到默认控制器文件夹中并移动到模块控制器。
那么现在如何运行已经移动到模块的控制器,当我从默认控制器文件运行它时如果删除不起作用,那么如何让它在模块内运行控制器作为默认控制器来运行。 / p>
那么我是否需要在路径中提及模块名称
答案 6 :(得分:0)
/*echo Modules::run("controller name of a module which you want to call/and its.. function name");*/
echo Modules::run("Second/callit");
或
$this->load->module('Second');
$this->second->callit();
但是..控制器名称的存储区在一个模块与另一个模块之间是不同的..
**(parameter passing)**
echo "<hr>";
//echo Modules::run("controller name of a module which you want to call/and its.. function name");
$data="peter";
echo Modules::run("Second/callit",$data);
echo "<hr>";
$this->load->module('Second');
$this->second->callit($data);
echo "<hr>";