私はすべての髪を引っ張っています...すべてのスレッドを検索してきました。誰かが私に実用的な例を教えてくれれば幸いです。
ドキュメントによると: 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
追記:スクリプトにエラーや警告はありません。コンストラクターを静かに呼び出します。
このHMVCは私にとってうまく機能します。現在、このHMVCを使ったプロジェクトに取り組んでいます。以下のリンクに示すようにthird_party/MX/Modules.php
を編集して、応答を教えてください。
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
いくつかの試みの後、どのモジュールにも配置されていないコントローラーを呼び出します。
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);
これは多くの人にとって明らかかもしれませんが、私は答えを探すのに2時間を無駄にしました。
/*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>";