2011-01-09 4 views
3

Ich verwende die Auth Tank-Bibliothek von CI, um Datensätze für bestimmte Benutzer abzufragen.Codeigniter-Variablen aus dem Konstruktor sind nicht definiert

Die Variable $user_id = tank_auth->get_user_id(); ruft die Benutzer-ID aus der Sitzung ab. Ich möchte Aufzeichnungen machen, wo user_id = $user_id.

Von was ich verstanden habe, können Konstruktoren Variablen jedes Mal laden, wenn eine Klasse initiiert wird. So ähnlich wie globale Variablen. Also habe ich gedacht, ich werde meine $user_id in einem Modellkonstruktor setzen, damit ich es für mehrere Funktionen innerhalb der Modellklasse verwenden kann.

class My_model extends Model { 

    function My_model() 
    { 
     parent::Model(); 
     $user_id = $this->tank_auth->get_user_id();  
    } 

     function posts_read() //gets db records for the logged in user 
    {  
     $this->db->where('user_id', $user_id); 
     $query = $this->db->get('posts'); 
     return $query->result(); 
    } 
} 

nächstes ich Laden des Modells, eine Anordnung in meinen Controller zu schaffen, und um die Daten zu meiner Ansicht sendet, wo ich eine foreach Schleife haben.

Beim Testen ich

Nachricht: Undefined variable: user_id

in meinem Modell. Es funktioniert jedoch, wenn ich die $user_id Variable in meiner posts_read Funktion definiere, aber ich will es nicht in jeder Funktion definieren, die es benötigt.

Was mache ich hier falsch?

Antwort

8

Variable Umfang Problem. Sie sollten auf Klassenebene Variablen erstellen, so dass es in anderen Funktionen auch wie folgt verfügbar:

class My_model extends Model { 
    private $user_id = null; 

    function My_model() 
    { 
     parent::Model(); 
     $this->user_id = $this->tank_auth->get_user_id();  
    } 

     function posts_read() //gets db records for the logged in user 
    {  
     $this->db->where('user_id', $this->user_id); 
     $query = $this->db->get('posts'); 
     return $query->result(); 
    } 
} 

Beachten Sie die Zugabe von $user_id nach Klassendeklaration, die später mit $this->user_id :)

+0

Danke! Es scheint auch ohne eine Var auf Klassenebene zu funktionieren. Ist das richtig? – CyberJunkie

5

Pull es in globalen Bereich

class My_model extends Model { 

    $user_id = 0; 

    function My_model() { 
     parent::Model(); 
     $this->user_id = $this->tank_auth->get_user_id();  
    } 

    function posts_read() //gets db records for the logged in user {  
     $this->db->where('user_id', $this->user_id); 
     $query = $this->db->get('posts'); 
     return $query->result(); 
    } 
} 
+0

Danke verwendet wird! Ich frage mich nur, warum hast du '$ user = 0;'? – CyberJunkie

+0

@CyberJunkie Das gleiche wie Safraz mit NULL. Ich initialisierte es mit einem echten Wert, da kein Benutzer "0" als seine ID hat. Sowohl "NULL" als auch "0" sind gut IMO – DrColossos

Verwandte Themen