2010-03-02 24 views
12

Warum lädt mein Modell die Verschlüsselungsbibliothek nicht? DieseLaden Sie eine Bibliothek in einem Modell in CodeIgniter

class User_model extends Model { 

    function User_model() { 
    parent::Model(); 
    $this->check_login(); 
    } 

    function check_login() { 
    $this->load->library('encrypt'); 
    $email = $this->encrypt->decode($email); 
    .... 
    } 
} 

gibt mir einen PHP-Fehler: Call auf eine Elementfunktion decode() auf einem Nicht-Objekt auf der Linie X -, wobei X die $ this- ist> Verschlüs- selung> decode ($ email); Linie?

Edited zu zeigen, dass das Problem war, dass check_login vom Konstruktor aufgerufen wurde

Antwort

5

Ich war check_login aus dem Konstruktor aufrufen, und das verursachte die Probleme.

Die Lösung ist $this->_assign_libraries(); direkt nach dem Laden einer Bibliothek in einem Konstruktor aufzurufen.

Dank diesem CodeIgnitor Forum-Thread: http://codeigniter.com/forums/viewthread/145537/

+3

Ich weiß, dass dieser Thread sehr alt ist, aber wenn Sie sehen, beachten Sie, dass die aktuelle Version von CI ermöglicht, Bibliotheken in Modellen ohne Probleme zu laden. –

20

Sie brauchen nicht die Bibliothek in dem Modell zu laden, sind Modelle immer von den REGLERN genannt, so dass Sie nur die Bibliotheken im Controller geladen werden müssen, und Die Funktionen werden in den von ihm aufgerufenen Modellen verfügbar sein!

Grüße,
Pedro

+10

Ja, aber das Laden von Bibliotheken, wo sie benötigt werden, minimiert Abhängigkeitsprobleme. – Summer

+1

Also laden Sie es in die gerade in Controller-Funktion, die das Modell anrufen – Pedro

+11

Was für eine beschissene Idee! Ernsthaft, ein weiterer kurzsichtiger Fehler des CodeIgniter-Teams! Ein Modell ist ein perfekter Ort, um eine API-Bibliothek zu nutzen, die sich mit dem Erhalt von Anwendungsdaten beschäftigt! Erzwinge das Laden einer Bibliothek im Controller, von der eine zugrunde liegende Model-Klasse abhängt! Was zum Teufel? Schrauben Sie das!Rufen Sie einfach $ this -> _ assign_libraries() auf; erledigt! – Bretticus

3

Bibliotheken automatisch in das Modell Instanz zugewiesen werden sollen, so sollte es funktionieren.

Denken Sie daran, dass Sie $ ci = & get_instance() verwenden können, wenn Sie keinen Zugriff auf das superglobale System haben.

Aber immer noch ... Ihr Code Beispiel sollte funktionieren>. <

2

Ich habe viele von ihnen versucht, aber am Ende, was ich tat, ist dies in einem Modell:

$this->load->library('mylib'); 
$mylib= new Mylib(); 
$mylib->somemethod(); 

Dies funktioniert für mich.

0

Sie können den Namen des Objekts für die Bibliothek ändern möchten Sie laden beacause CI auch die encrypt Klasse

bekommen hat

gerade tun

$this->load->library('encrypt',NULL,'myencryptobj'); 
$this->myencryptobj->yourfunction(); 

hoffe, das hilft

0

i stand auch facebook api gegenüber, dann habe ich required_once die lib-datei von facebook im model versucht. es hat für mich funktioniert.

require_once "application/libraries/facebook.php"; dann machen Sie ihr Objekt, wenn Sie brauchen.

Verwandte Themen