代码点火器+HMVC跨模块调用控制器->;方法


codeigniter+HMVC cross module call controller->method

我正在全力以赴……我一直在搜索每一个线程,如果有人能给我指一个工作示例,我将不胜感激。

向医生致敬: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>";