codeigniter + HMVC交叉模块呼叫控制器 - >方法
我拉着我的头发......一直在搜索每一个线程,如果有人能指出我的一个工作示例,将不胜感激。codeigniter + HMVC交叉模块呼叫控制器 - >方法
Accroding该文档: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();
问题调用另一个模块 - >控制器:的 “方法()” 不会被调用。每次只调用控制器的构造函数。
目标是将独立的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
附加说明:没有错误或脚本警告。它只是悄悄地调用构造函数。
这HMVC适合我。我正在使用此HMVC正在开发一个项目。 只需编辑third_party/MX/Modules.php
,如下面的链接所示,并告诉我回复。
感谢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?
谢谢里德。这将有助于初学者。给予好评:) – 2013-02-20 16:10:57
这不是为我工作:-( – 2013-09-15 08:54:04
@MostafaShahverdy究竟是不是为你工作?所有3种方法? – Reed 2013-09-15 18:28:39
我也是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根据他们所说的文档,他们说复制控制器在默认控制器文件夹并移动到模块控制器。
那么现在如何运行已经被移动到模块的控制器,当我从默认控制器文件运行它的运行时,如果删除不起作用,那么如何使它运行模块内的控制器作为默认控制器运行。
所以我需要在路由
我碰到了同样的问题也提模块名称。确保你检查你的目录和和控制器的大小写。不区分模块和控制器名称。
//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('../控制器/方法');
感谢您的链接!我收到了以下消息:Module controller failed to run:ztest2/c2/testc2/ – Reed 2013-02-19 14:52:27
您的问题解决了吗? – 2013-02-20 09:21:34
它已经解决了。我在下面回答了我的发现。我接受了你的答案,因为它帮助我调试了这件事情。不知道HMVC抛出错误只记录。谢谢! – Reed 2013-02-20 15:32:01