2013-02-18 5 views
8

Ich ziehe mir alle meine Haare aus ... Habe jeden Thread durchsucht, würde mich freuen wenn mir jemand auf ein funktionierendes Beispiel hinweisen kann.codeigniter + HMVC Kreuzmodul Call Controller-> Methode

zum doc Accroding: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc ich einem anderen Modul- nennen> Controller

modules::run('module/controller/method', $params); 
modules::load('module/controller/method', $params); 
or 
$this->load->module('module/controller'); 
$this->controller->method(); 

Problem mit: die "Methode()" wird nie genannt. Nur der Konstruktor des Controllers wird jedes Mal aufgerufen.

Ziel ist es, eigenständige MVCs als Modul zu erstellen und von anderen Controllern zu verwenden. Aber egal was ich tue, es ruft nur den Konstruktor auf, die Methode wird nicht aufgerufen. Ich habe vor ein paar Wochen begonnen, HMVC zu benutzen, habe ich etwas im Doc übersehen oder es wird nicht so benutzt?
ist die Einrichtung:

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 

zusätzliche Anmerkung: kein Fehler oder mit dem Skript zu warnen. Es ruft nur leise den Konstruktor an.

Antwort

2

Diese HMVC funktioniert gut für mich. Ich arbeite jetzt an einem Projekt mit diesem HMVC. Bearbeiten Sie einfach third_party/MX/Modules.php wie in diesem Link gezeigt und sagen Sie mir die Antwort.

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

+0

Danke für den Link! Ich habe folgende Meldung erhalten: Modul-Controller konnte nicht ausgeführt werden: ztest2/c2/testc2/ – Reed

+0

Ihr Problem ist behoben? –

+0

Es ist gelöst. Ich habe mein Ergebnis als Antwort unten angegeben. Ich habe deine Antwort akzeptiert, weil es mir geholfen hat, dieses Ding zu debuggen. Wusste nicht HMVC Wurf Fehler, nur zu loggen. Vielen Dank! – Reed

19

Dank für Spitze MC ich endlich herausgefunden, die Ursache. Dem HMVC-Doc fehlen in der Tat einige Beispiele für Anfänger.

Für alle, die diesen Thread in der Zukunft finden können, hier die korrekte Verwendung:

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

Ich verstehe nicht, warum Methode 3 versagt, wenn ich zum ersten Mal versuchen ... vielleicht, weil ich HTTPD neu gestartet?

+0

Danke Reed. Dies wird Anfängern helfen. UPVOTE :) –

+0

Dies funktioniert nicht für mich :-( –

+0

@MostafaShahverdy was funktioniert nicht für Sie? Alle 3 Methoden? – Reed

0

Ich bin neu bei CI, und ich dachte, ich hätte das gleiche Problem. Script schien nicht zu laufen. (keine HTML-Ausgabe).

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

Das mag für viele von Ihnen offensichtlich sein - aber ich habe zwei Stunden damit verbracht, nach einer Antwort zu suchen.

0

so Nach der Dokumentation, die sie sagt, kopieren Sie den Controller in Standard-Controller-Ordner und verschieben Sie auf Modul-Controller.

So jetzt wie ich den Controller, der zu Modulen verschoben wurde ausgeführt habe, wenn es von der Standard-Controller-Datei ausgeführt wird, wenn entfernt funktioniert nicht, so wie es den Controller innerhalb des Moduls ausführen als Standard-Controller ausgeführt werden soll.

So Muss ich die Module Name auch in der Route

1

ich in der gleichen Ausgabe lief erwähnen. Stellen Sie sicher, dass Sie die Groß- und Kleinschreibung Ihrer Verzeichnisse und Controller überprüfen. Zwischen dem Namen des Moduls und des Controllers muss nicht unterschieden werden.

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

Nach einigen Versuchen, einen Controller aufzurufen, der sich nicht in einem Modul befindet.

Module :: run ('../ Controller/Methode ');

Verwandte Themen