2010-03-02 28 views
12

Tại sao mô hình của tôi không tải thư viện mã hóa?Tải thư viện trong một mô hình trong 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); 
    .... 
    } 
} 

Điều này cho tôi lỗi PHP: Gọi hàm thành viên decode() trên một đối tượng không phải trên dòng X - trong đó X là $ this-> encrypt-> decode ($ email); hàng?

Edited để chứng minh rằng vấn đề là check_login được gọi từ các nhà xây dựng

Trả lời

5

Tôi đã gọi check_login từ bên trong các nhà xây dựng, và điều đó đã gây ra vấn đề.

Giải pháp là gọi $this->_assign_libraries(); ngay sau khi tải thư viện trong một hàm tạo.

Nhờ diễn đàn trợ giúp codeignitor: http://codeigniter.com/forums/viewthread/145537/

+3

Tôi biết chủ đề này là rất cũ, nhưng nếu bạn thấy điều này được nhận thức rằng phiên bản hiện tại của CI cho phép bạn tải Libraries trong mô hình mà không có bất kỳ vấn đề. –

20

Bạn không cần phải tải các thư viện trong MODEL, NGƯỜI MẪU luôn gọi từ các bộ điều khiển, do đó bạn chỉ cần tải các thư viện trong điều khiển, và các chức năng sẽ có sẵn trong các mô hình được gọi từ anh ta!

Kính trọng,
Pedro

+10

Có, nhưng tải các thư viện mà chúng cần để giảm thiểu các vấn đề phụ thuộc. – Summer

+1

Vì vậy, tải nó trong chỉ trong chức năng điều khiển gọi mô hình – Pedro

+11

Thật là một ý tưởng crappy! Nghiêm túc, Một sai lầm thiển cận ngắn khác của nhóm CodeIgniter! Một mô hình là một nơi hoàn hảo để tiêu thụ thư viện API liên quan đến việc nhận dữ liệu ứng dụng! Buộc tôi tải một thư viện trong bộ điều khiển mà lớp Mô hình cơ bản phụ thuộc vào! ?? Cái quái gì thế? Kệ đời nó!Chỉ cần gọi $ this -> _ assign_libraries(); làm xong! – Bretticus

3

Thư viện sẽ tự động được gán cho ví dụ mẫu vì vậy nó phải hoạt động tốt.

Hãy nhớ rằng nếu bạn không thể truy cập siêu toàn cầu, bạn luôn có thể sử dụng $ ci = & get_instance() để lấy nó mà không mất thêm chi phí cho bộ nhớ của bạn.

Nhưng vẫn ... ví dụ mã của bạn nên hoạt động>. <

2

Tôi đã cố gắng rất nhiều trong số họ, nhưng cuối cùng, những gì tôi đã làm là này trong một mô hình:

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

này làm việc cho tôi.

0

bạn có thể muốn thay đổi tên của đối tượng cho các thư viện bạn đang tải + Nhà CI cũng đã có các lớp mã hóa

chỉ làm

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

Hope this helps

0

i cũng đã phải đối mặt với vấn đề về api facebook, sau đó tôi đã thử require_once các tập tin lib của facebook trong mô hình. nó làm việc cho tôi.

require_once "application/libraries/facebook.php"; sau đó tạo đối tượng nếu cần.

Các vấn đề liên quan