2011-07-09 27 views
6

Tôi đang gặp một số sự cố khi hiểu cách hoạt động của tính năng tải mã.Tải của codeigniter hoạt động như thế nào?

Trước tiên, bạn có tự động tải có vẻ khá thẳng về phía trước, nó tải mọi thứ mọi lúc. Vì vậy, điều này nghe có vẻ tốt để sử dụng cho những thứ tôi sử dụng tất cả các thời gian.

Thứ hai, bạn có thể tải mọi thứ nội tuyến. Nhưng đây là câu hỏi của tôi: Nó được tải bao lâu?

Giả sử tôi tải thư viện xác nhận biểu mẫu trong bộ điều khiển, sau đó tôi tải mô hình, tôi có thể sử dụng xác thực biểu mẫu trong mô hình hoặc tôi có phải tải lại nó không? Tiếp tục giả sử tôi tải chế độ xem và một bộ điều khiển khác, tôi có thể sử dụng xác thực biểu mẫu không? Hay tôi cần tải? Sau khi chuyển hướng? Làm cách nào để tải một mô hình hoặc trình trợ giúp thay vì thư viện? Giả sử tôi muốn sử dụng một mô hình bên trong một mô hình khác, tôi tải mô hình đó ở đâu?

Vì vậy, câu hỏi cơ bản, khoảng thời gian bao lâu hay không tải trọng trước khi tôi cần tải lại?

Trả lời

4

Việc xếp dỡ, như @yi_H một cách chính xác chỉ ra, kéo dài cho tất cả các đời kịch bản hiện hành. I E. khi bạn đang gọi phương thức của bộ điều khiển, tài nguyên sẽ được tải. Nếu bạn gọi cùng một tài nguyên bên trong một phương thức khác, điều đó không còn khả dụng nữa.

Điều đó xảy ra vì bộ điều khiển được khởi tạo ở mỗi yêu cầu, vì vậy khi bạn truy cập index.php/mycontroller/method1 bộ điều khiển được khởi tạo (bạn có thể bật nhật ký và xem điều này rõ ràng). Trong phương pháp của bạn, bạn tải, nói, người trợ giúp html. Nếu sau đó bạn truy cập index.php/mycontroller/method2, và nó cũng yêu cầu trình trợ giúp html, nhưng bạn không tải nó giới thiệu phương pháp, bạn sẽ nhận được một lỗi chức năng không tìm thấy.

Vì vậy, về cơ bản, nếu bạn muốn có những tài nguyên cùng luôn luôn có sẵn, bạn có 3 lựa chọn:

  1. autoload nó trong application/config/autoloader.php
  2. tải nó tại mọi yêu cầu, tức là bên trong mỗi phương pháp sẽ sử dụng tài nguyên đó
  3. đặt nó bên trong hàm tạo của bộ điều khiển, do đó, để luôn có phương thức khởi tạo ở mỗi yêu cầu.

Nó ít nhiều giống như tự động tải, ngoại trừ việc nó có thể chỉ hoạt động cho bộ điều khiển mà bạn đặt hàm khởi tạo vào, vì vậy bạn sẽ nhận được lợi ích khi bạn không muốn tải gì đó vào bộ điều khiển EACH (như khi bạn sử dụng tính năng tự động tải) nhưng chỉ trên một vài. Để sử dụng phương pháp cuối cùng này, hãy nhớ để gọi constructor PHỤ HUYNH bên trong điều khiển của bạn (như bạn làm như thường lệ với các mô hình):

function __construct() 
{ 
    parent::__construct(); 
    $this->load->library('whateveryouwant'); 
} 
+0

Ahh, bây giờ tôi hiểu. Rất rõ ràng, cảm ơn rất nhiều! : D – Vejto

-1

Để tải một cái gì đó khi viết mô hình hoặc helper của riêng bạn, ví dụ:

$ci = get_instance(); 
$ci->load->library('user_agent'); 
$ci->load->database(); 

Về tất cả các câu hỏi khác, tôi nghĩ bạn nên tải những gì bạn cần cho mỗi Controller.

+0

Không hẳn câu hỏi của tôi nhưng vẫn cảm ơn vì cố gắng!;) – Vejto

0

Nó sẽ nằm ở đó cho đến khi kết thúc thời gian (có nghĩa là, khi kịch bản của bạn kết thúc và vũ trụ sụp đổ)

+0

Okey, nếu đúng như vậy, tại sao tôi không nên tự động tải mọi thứ mà tôi biết mình sẽ sử dụng? Bởi vì nó sẽ không có ý nghĩa nếu tự động tải lại tất cả mọi thứ mọi lúc. Hay tôi bỏ lỡ hiểu ý nghĩa của kịch bản kết thúc? Tập lệnh có kết thúc khi người dùng rời khỏi trang web của tôi hoặc khi trang tải xong không? – Vejto

+0

Đó là khi tạo trang xong. Sry cho câu trả lời bí truyền :) –

+0

Vejto: Đối với mỗi yêu cầu tiếp theo, tập lệnh sẽ bắt đầu và kết thúc. – hakre

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