2011-07-09 64 views
6

我在理解codeigniters加載工作方面遇到了一些麻煩。codeigniter的負載是如何工作的?

那麼首先你有自動加載,它看起來非常簡單,每次都加載一切。所以這聽起來很好用於我一直使用的東西。

第二,你可以加載一切內聯。但這是我的問題:它保持多久?

讓說我加載表單驗證庫控制器,然後我加載模型,我可以使用表單驗證模型或做我必須重新加載它? 繼續說,我加載一個視圖和另一個控制器,我可以使用表單驗證?或者我需要加載? 重定向後? 如果我加載模型或助手而不是庫,那麼如何? 假設我想在另一個模型中使用模型,我在哪裏加載該模型?

所以基本的問題,多長時間或者說多遠不會負荷走之前,我需要重新加載?

回答

4

加載,如@yi_H正確地指出,持續了目前所有的腳本壽命。 I.E.當你調用控制器的方法時,資源被加載。如果您在另一種方法中調用相同的資源,則不再可用。

發生這種情況是因爲每次請求都初始化控制器,所以當您訪問 index.php/mycontroller/method1時,控制器將被初始化(您可以啓用日誌並清楚地看到它)。在你的方法中,你需要加載,比如html助手。 如果然後訪問index.php/mycontroller/method2,,它也需要HTML幫助,但你沒有加載它介紹的方法,你會得到未發現功能的錯誤。

所以,基本上,如果你想擁有隨時可用相同的資源,你有3種選擇:

  1. 自動加載它的application/config/autoloader.php
  2. 負載它在每一項要求,即內每一種方法是將要使用該資源
  3. 把它的控制器的構造函數裏面,所以要把它總是在每個請求初始化。

它與自動加載或多或少相同,除了它只能用於您放置構造函數的控制器,所以當您不希望在每個控制器上加載某些內容時可以獲得好處(就像當你使用自動加載),但只有在少數。 爲了使用這個最後的方法,記得調用父類的構造你的控制器內(像你這樣的模型通常做):

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

啊,現在我明白了。非常清楚,非常感謝! :d – Vejto

-1

要編寫自己的模式或輔助,例如當加載的東西:

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

關於所有其他的問題,我想你應該載入您所需要的每個控制器。

+0

不太我的問題,但仍然感謝您試用!;) – Vejto

0

它留在那裏,直到時間結束時(即,當你的腳本結束和宇宙崩潰)

+0

Okey,如果是這樣的話,爲什麼我不應該自動加載我知道我將使用的所有東西?因爲如果自動加載一直都會重新加載所有內容,這是沒有意義的。或者我想知道劇本的含義結束了嗎?當用戶離開我的網站或頁面加載完成時腳本是否結束? – Vejto

+0

頁面生成完成時。 Sry爲深奧的答案:) –

+0

Vejto:對於每個下一個請求,腳本將開始和結束。 – hakre