2010-03-02 9 views
12

Dlaczego mój model nie załaduje biblioteki szyfrowania?Załaduj bibliotekę do modelu w 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); 
    .... 
    } 
} 

To daje mi błąd PHP: Zadzwoń do dekodowania funkcji członka() na brak obiektów na linii X - gdzie X to $ this-> encrypt-> dekodowania ($ email); linia?

Edited by pokazać, że problemem było to check_login nazwano od konstruktora

Odpowiedz

5

byłem wywołującego check_login od wewnątrz konstruktora, a który był przyczyną problemów.

Rozwiązaniem jest wywołanie $this->_assign_libraries(); zaraz po załadowaniu biblioteki do konstruktora.

Dzięki ten wątek codeignitor: http://codeigniter.com/forums/viewthread/145537/

+3

Wiem, że ten wątek jest bardzo stary, ale jeśli widzisz to, pamiętaj, że bieżąca wersja CI pozwala ładować biblioteki w modelach bez żadnych problemów. –

20

Nie trzeba załadować biblioteki w modelu, modele są zawsze nazywane od administratorów więc po prostu trzeba załadować biblioteki w sterowniku, a funkcje będą dostępne w modelach zwanych od niego!

Pozdrawiam,
Pedro

+10

Tak, ale ładowanie bibliotek tam, gdzie są potrzebne, minimalizuje problemy z zależnościami. – Summer

+1

Więc załaduj go w funkcji just in controller, która nazywa się modelem – Pedro

+11

Co za głupi pomysł! Poważnie, Kolejny krótkowzroczny błąd zespołu CodeIgniter! Model jest idealnym miejscem do korzystania z biblioteki API, która zajmuje się pozyskiwaniem danych aplikacji! Zmusz mnie do załadowania biblioteki w kontrolerze, od której zależy podstawowa klasa Modelu! Co do cholery? Chrzanić to!Po prostu zadzwoń $ this -> _ assign_libraries(); Gotowe! – Bretticus

3

Biblioteki powinny być automatycznie przypisane do instancji modelu więc powinien działać dobrze.

Pamiętaj, że jeśli nie masz dostępu do supergładki, zawsze możesz użyć $ ci = & get_instance(), aby pobrać ją bez dodatkowych kosztów do swojej pamięci.

Ale nadal ... Twój przykład kodu powinien działać>. <

2

Próbowałem wielu z nich, ale w końcu, co zrobiłem, to jest w modelu:

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

Działa to dla mnie.

0

może chcesz zmienić nazwę obiektu dla biblioteki ładowanego beacause CI również got klasa zaszyfrować

prostu zrobić

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

nadzieję, że to pomaga

0

ja również napotkałem problem dotyczący facebook api, a następnie wypróbowałem required_once plik lib z facebooka w modelu. to zadziałało dla mnie.

require_once "application/libraries/facebook.php"; następnie uczynić jego obiekt, jeśli potrzebujesz.

Powiązane problemy