我正在全力以赴……我一直在搜索每一个线程,如果有人能给我指一个工作示例,我将不胜感激。
向医生致敬: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
附加说明:脚本没有错误或警告。它只是悄悄地调用构造函数。
感谢MC的提示,我终于找到了原因。HMVC文档确实缺少一些初学者的例子。
对于任何可能在未来找到此线程的人,请在此处更正用法:
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?
这个HMVC对我来说很好。我现在正在使用这个HMVC进行一个项目。只需编辑third_party/MX/Modules.php
,如下链接所示,并告诉我响应。
https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/pull-request/5/return-error-messages-instead-of-logging/diff
我遇到了同样的问题。请确保检查目录和控制器的大小写。对于模块和控制器名称之间的差异,它不区分大小写。
//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
经过一些尝试后,调用一个不位于任何模块中的控制器。
Modules::run('../Controller/method');
我也是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);
这对你们中的许多人来说可能是显而易见的,但我浪费了两个小时来寻找答案。
so根据文档,他们说将控制器复制到默认控制器文件夹中,然后移动到模块控制器。
现在,当我从默认控制器文件运行已移动到模块的控制器时,如果删除了它,我该如何运行它?如果不起作用,那么如何使它将模块内的控制器作为默认控制器运行。
因此,我是否也需要在路由中提及模块名称
/*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>";