2016-08-02 9 views
0

Ich habe einen Controller in CodeIgniter erstellt, der den gesamten Admin steuert. Je nach URL wird ein anderer Controller geladen. Es funktioniert zwar einwandfrei, aber die Controller, die vom Admin-Controller geladen werden, können diese nicht erreichen.CodeIgniter Controller kann die Datenbank nicht laden

Hier ist mein Code in der Admin-Controller, die die notwendigen Controller laden.

public function renderAdmin(){ 
    $get=$this->input->get(); 
    if (!empty($get['module'])){ 
     $module=$get['module']; 
    } 
    else{ 
     $module=""; 
    } 
    if (!empty($module)){ 
     if (!empty($get['method'])){ 
      $method=$get['method']; 
     } 
     else{ 
      $method="index"; 
     } 
     $module=modules::load($module."/".$module); 
     if (!method_exists($module, $method)){ 
      $method="index"; 
     } 
     $module->$method(); 
    } 
    else{ 
     $data['screen']=$this->config->item('foo_template_dir_admin')."index"; 
     $data['menuPoints']=self::getMenuPoints(); 
     $this->load->view($this->config->item('foo_template_dir_admin') . "frame", $data); 
    } 
} 

Und wenn ich z. Der Tag-Controller kann die Datenbank nicht laden.

public function index(){ 
    $data['menuPoints']=Admin::getMenuPoints(); 
    $data['screen']=$this->config->item('mindenrekepes_template_dir_admin')."tags/index"; 

    var_dump($this->db); // NULL 

    $this->load->view($this->config->item('mindenrekepes_template_dir_admin')."frame", $data); 
} 

Die Datenbank befindet sich in der Autoloading-Datei, also würde sie geladen werden.

In der Admin-Controller oder in einem seiner Modelle, kann ich die Datenbank erreichen, so dass die Datenbank-Konfiguration und das Autoloading ist auch richtig in der Hauptsteuerung.

Wissen Sie, wäre das Problem? Ich hoffe, dass mir in diesem Fall jemand helfen kann.

+0

Dies ist in der Autoload und korrekt funktionieren, sondern nur die Haupt-Controller hat die $ db Attribut und die anderen nicht. – kukko

+0

Ich habe das Problem gefunden, weil die HMVC-Erweiterung ich MX_Controller statt MY_Controller erweitern würde. Entschuldigung, ich habe in der Frage nicht erwähnt, wie ich HMVC benutze. Aber ich akzeptiere die Antwort von @ g9m29, weil das wirklich hilfreich war. – kukko

Antwort

1

Sie können Ihre App-Logik-Design weiter verbessern, weil ich denke, das ist nicht optimal. Für Ihre Bedürfnisse, obwohl Sie versuchen können, diese Methode zu verwenden.

Versuchen Sie, die private statische $ db-Variable zu Ihrem Controller hinzuzufügen und eine DB-Instanz in __construct zu erstellen. Dann können Sie wie mit Ihrem db weiter self::db->get()->result()-> etc.

+0

Ich würde das in jedem Controller hinzufügen, der vom Hauptcontroller geladen wird? – kukko

+0

Es hat nicht funktioniert, ich habe immer noch Null in jedem Controller für die $ db-Eigenschaft. – kukko

+0

Ja in jedem Controller, der neben Ihren Controllern existiert, aber alle Ressourcen von CI nutzen kann. Wenn diese Controller innerhalb von CI aufgerufen werden und als "allgemeine" Controller für CI gelten und den CI_Controller oder MY_Controller erweitern, dann geben Sie Ihrem Hauptcontroller und einem Subcontroller den vollständigen Code, damit wir sehen können, wo die Kopplung falsch ist. – g9m29

0

die Sie interessieren im Konstruktor:

function __construct(){ 
$this->load->database(); 
} 
+0

Ich habe dies bereits versucht und hat nicht funktioniert. – kukko