Codeigniter Call Controller vom Controller

8

Nach den letzten beiden Kommentaren werde ich meinen echten Code ausgeben und vielleicht wird es helfen:

Hier ist der Landing Controller:

%Vor%

Hier ist ein Beispiel für einen dynamischen Controller, der aufgerufen wird:

%Vor%

Hier ist mein Modell, das ich verwende:

%Vor%

Der Fehler, den ich bekomme, ist entweder das (error1):

%Vor%

oder das (error2):

%Vor%

Meine Theorie, warum ich diese Fehler erhalte, liegt darin begründet, dass die Instanz des Objekts anders ist als die, die das Modell und die Bibliotheken geladen hat. Das Seltsame daran ist, dass Arrays übertragen werden, aber keine Objekte. So wird im Kern die Loader.php des Codeigniter-Arrays $ _ci_models mit Modellen gefüllt, die nicht in der Klasse Public_homepage geladen sind

Was Ihnen auch helfen könnte, ist, dass ich die Module vom ersten Durchlauf an durch die Businessbuilder-Klasse erfolgreich laden und verwenden kann, aber wenn Public_homepage aufgerufen wird, fangen die Dinge an zu scheitern.

Was das verwirrend macht, ist, dass ich versuche, zwei Fehler mit einer Frage herauszufinden, was wahrscheinlich mein Fehler ist. Hier ist eine Beschreibung, wann ich die Fehler bekomme:

Fehler1:

Wenn ich den Code so laufe, wie ich bin, kann ich die sites -Eigenschaft nicht aufrufen.

Fehler2:

Wenn ich das ändere call_user_func_array (array (& amp; $ CI, $ funktion), array_slice ($ RTR- & gt; uri- & gt; rsegmente, 2)); zu eval ($ class. "- & gt;". $ -Funktion);

Ich verstehe, dass dies wirklich verwirrend ist, besonders wenn ich es erkläre, aber wenn Sie mehr Informationen brauchen, lassen Sie es mich wissen. Beachten Sie auch, dass die Public_homepage so aussieht, weil ich gerade teste. Wenn der Fehler mit minimalem Code erzeugt werden kann, müssen keine unnötigen Zeilen mehr ausgegeben werden.

Aktualisieren

Nachdem ich einige der Antworten gelesen hatte, wurde mir klar, dass ich den Code nicht erklärt hatte. Was dieser Code macht, ist, dass ich verschiedene URLs in einer Datenbank speichern kann, aber alle URLs, die dort gespeichert sind, können dieselbe Seite aufrufen, obwohl sie unterschiedlich sind. Ich denke, ein genaues Beispiel würde den Slug auf Wordpress ändern.

Was passiert, ist, dass die Businessbuilder-Klasse so eingestellt ist, dass sie ALLE Anfragen an den Server akzeptiert. Wenn es die Businessbuilder-Klasse erreicht, greift es auf die Datenbank zu, findet heraus, welche Sub-URL Sie verwenden, sucht den echten Controller, nach dem der Benutzer sucht, und greift auf diesen Controller zu.

    
JohnathanKong 17.02.2011, 20:49
quelle

3 Antworten

6

Nach vielen Suchen habe ich einen Workaround. Das Problem, was ich mit der Instanz dachte. Nach dem Einstieg in das Framework erkannte ich, dass es die Instanz als statische var, private statische $ Instanz speichert. Ich habe den Konstruktor so geändert, dass er nicht überschrieben wird, wenn diese Variable aufgefüllt wurde. Da es noch einige Besonderheiten beim Laden gab, wurden Objekte aus irgendeinem Grund als geladen markiert, aber in Wirklichkeit nicht, ich musste dem Controller eine neue Variable hinzufügen, geschützt $ ci_instance. Am Ende habe ich den CI_Controller so verändert, dass er wie folgt aussieht:

%Vor%

Das einzige Problem ist bisher, dass ich $ this- & gt; load- & gt; model ("some_model") nicht machen kann. Stattdessen muss ich $ this- & gt; ci_instance- & gt; load- & gt; -Modell ("some_model") verwenden; und alles wird von dort stammen. Ich interessiere mich nicht sonderlich für das Extra-Var, aber was ich nicht mag, ist das Ändern von Out-of-Box-Lösungen, weil es die Komplexität erhöht, ein Upgrade durchzuführen.

Für jetzt habe ich dies als eine Antwort markiert, weil es das ist, was "Ich" als meine Lösung gewählt habe, aber ich bin immer noch offen für eine bessere Lösung als die, die ich benutze. Eine genaue Beschreibung dessen, was gelöst werden muss, ist wie folgt:

Kopieren Sie alle geladenen Eigenschaften von einer Instanz in eine andere. Grundsätzlich eine Fusion von zwei Instanzen, wenn möglich.

Wenn jemand das mit einer besseren Lösung als meiner beantworten kann, vorzugsweise ohne den Codeigniter-Kern zu verändern, würde ich gerne meine Antwort ändern, weil ich mit meiner Lösung nicht zufrieden bin, weil ich nicht weiß, welche Effekte ich später erfahren werde während der Entwicklung.

    
JohnathanKong 17.02.2011, 22:26
quelle
1

Setzen Sie in Ihrer Anwendung / autoload.php den Codeigniter, um die Datenbankklasse zu laden.

%Vor%

Es muss alles sein, was Sie brauchen, um Ihr Problem zu lösen.

    
quelle
0

wenn Sie HMVC nur mit

verwenden %Vor%     
Helmi Yahya Susanto 21.04.2013 03:16
quelle

Tags und Links