codeigniter + контроллер перекрестного вызова HMVC-> метод

Я отрываю все свои волосы … Я искал каждую тему, был бы признателен, если бы кто-нибудь мог указать мне на рабочий пример.

Подсказка к документу: 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 как показано ниже, и сообщите мне ответ.

https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/pull-request/5/return-error-messages-instead-of-logging/diff

Спасибо за отзыв 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?

Я столкнулся с тем же вопросом. Убедитесь, что вы проверяете капитализацию своих каталогов и контроллеров. Это не чувствительно к регистру для разницы между именем модуля и контроллера.

 //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 

После некоторых попыток добиться вызова контроллера, который не находится в каком-либо модуле.

Модули :: Run ( '../ контроллер / метод');

Я тоже новичок в 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); 

Это может быть очевидным для многих из вас, но я потратил два часа на поиски ответа.

поэтому в соответствии с документацией они говорят, что скопируйте контроллер в папку контроллера по умолчанию и перейдите к контроллеру модулей.

Итак, как мне запустить контроллер, который был перемещен в модули, когда я запускаю его из файла контроллера по умолчанию, если его удалить, не работает, так как заставить его запускать контроллер внутри модуля в качестве контроллера по умолчанию для запуска.

Итак, нужно ли упоминать имя модуля на маршруте