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

дополнительное примечание: нет ошибок или предупреждений со сценарием. Это просто тихо вызывает конструктор.

Ответы на вопрос(7)

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

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); 

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

  /*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 "";

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

      $this->load->module('Second');

     $this->second->callit($data);

      echo "";

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

 Reed15 сент. 2013 г., 20:28
@MostafaShahverdy что у вас не работает? все 3 способа?
 Mostafa Shahverdy21 сент. 2013 г., 11:59
Кажется, у меня проблемы с именами ...
 Mostafa Shahverdy16 сент. 2013 г., 07:56
@ Рид, ни один из них :-(
 CobaltBabyBear01 нояб. 2013 г., 16:35
Это потрясающее объяснение. Жаль, что я могу дать только один палец вверх. :)
 Mostafa Shahverdy15 сент. 2013 г., 10:54
Это не работает для меня :-(
 Mansoorkhan Cherupuzha20 февр. 2013 г., 17:10
Спасибо, Рид. Это поможет новичкам. UPVOTE :)
 Bhavesh Gangani02 апр. 2017 г., 19:14
@Reed Если я использую то же имя контроллера в другом модуле, и запускаю этот модуль 's метод в контроллере с тем же именем выдает ошибку "вызов неопределенного метода ".

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

//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
 Dylan B26 дек. 2018 г., 15:57
отлично, спасибо
Решение Вопроса

Этот 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

 Reed20 февр. 2013 г., 16:32
Это'решено. Я изложил свои выводы в ответе ниже. Я принял ваш ответ, потому что это помогло мне отладить эту вещь. Не знаю, HMVC выбросить ошибку только для входа. Спасибо!
 Mansoorkhan Cherupuzha20 февр. 2013 г., 17:07
@ Рид, теперь яя работаю над проектом с этим HMVC, поэтому яя учусь через это
 Bhavesh Gangani02 апр. 2017 г., 15:55
@Reed Принятый ответ должен быть фактическим ответом, который решает проблему.
 Mansoorkhan Cherupuzha20 февр. 2013 г., 10:21
Ваша проблема решена?
 Reed19 февр. 2013 г., 15:52
Спасибо за ссылку! Я получил это сообщение: Модуль контроллера не удалось запустить: ztest2 / c2 / testc2 /

Ваш ответ на вопрос