是否有本地codeigniter函數我可以用來判斷某個模型是否已經加載?可以使用php的class_exists()
來判斷模型是否已經加載?Codeigniter:我怎麼知道模型是否已經加載?
回答
我會試圖擴展CI_Loader
核心類。 (見extending Core Class)
class MY_Loader extends CI_Loader {
function __construct()
{
parent::__construct();
}
/**
* Returns true if the model with the given name is loaded; false otherwise.
*
* @param string name for the model
* @return bool
*/
public function is_model_loaded($name)
{
return in_array($name, $this->_ci_models, TRUE);
}
}
你會檢查有以下一個給定的模型:
$this->load->is_model_loaded('foobar');
That strategy已被使用的CI_Loader
類。
此解決方案支持CI的模型命名功能,其中模型可以具有與模型類本身不同的名稱。 class_exists
解決方案不支持該功能,但如果您不重命名模型,應該可以正常工作。
注意:如果您更改了subclass_prefix
配置,它可能不再是MY_
。
編輯:
您可以使用log_message()函數。
在模型的構造將這個(父::模型())
log_message ("debug", "model is loaded");
不要忘記設置日誌配置調試模式在config.php文件
$config['log_threshold'] = 2;
並將系統/日誌目錄權限設置爲可寫(默認情況下,CI將在此創建日誌文件)
或將日誌目錄設置爲另一個目錄
$config['log_path'] = 'another/directory/logs/';
CI會在目錄中創建日誌文件。根據需要監視日誌文件。您可以獲取調試消息,以查看您的模型是否已加載或未加載到日誌文件中。
這隻會讓我知道,如果該文件存在,我想知道如果第一個模型已經在控制器中動態加載或如果已通過自動加載自動加載 – Xecure 2013-02-19 01:33:06
Riffing過什麼馬克西姆·莫蘭& Tomexsans寫了,這是我的解決方案:
<?php
class MY_Loader extends CI_Loader {
/**
* Model Loader
*
* Overwrites the default behaviour
*
* @param string the name of the class
* @param string name for the model
* @param bool database connection
* @return void
*/
function model ($model, $name = '', $db_conn = FALSE) {
if (is_array($model) || !class_exists($model)) {
parent::model($model, $name, $db_conn);
}
}
}
?>
這樣,你永遠不要需要(有意識)檢查模型加載與否是否:)
我遇到我多次加載類的情況,並沒有拋出任何錯誤,但它使用了PHP內存限制,這解決了我的問題,無需修改任何其他代碼,所以非常感謝! – Sam 2015-04-25 13:15:50
最簡單的解決方案是使用PHP函數class_exists
http://php.net/manual/en/function.class-exists.php
例如。如果你想檢查是否已經定義了Post_model。
$this->load->model('post_model');
/*
a lot of code
*/
if (class_exists("Post_model")) {
// yes
}
else {
// no
}
最簡單的是最好的..
- 1. 我怎麼知道用戶是否已經離開了頁面?
- 2. 使用yepnope,我怎麼知道一個CSS資源是否已成功加載?
- 3. 我怎麼知道什麼時候已經HTML完全呈現
- 4. 知道java是否已經過去了
- 5. 我怎麼知道當天已經看過視頻文件?
- 6. 我怎麼知道文件已經打開或正在使用?
- 7. 我怎麼知道是否有窗口被模態阻擋
- 8. 當我得到的是一個net.TCPConn的EOF,我怎麼知道連接是否已經被丟棄?
- 9. 我不知道延遲加載模式是否是這裏
- 10. 我怎麼能找到我的.RDA已經加載到R
- 11. 我怎麼知道什麼TextView是clickbale?
- 12. 如何知道url是否已經加入書籤
- 13. 如何知道laravel中給定模型上的關係是否已經更新?
- 14. 我如何知道時間是否已經過去? Swift
- 15. 我如何知道工作是否已經完成? - crontab的
- 16. 怎麼知道當前緩衝區已經設置標誌
- 17. Codeigniter模型加載
- 18. 在運行時,我怎麼知道我是否在WinXP +上? win32
- 19. cURL:我怎麼知道我的cookies是否設置正確?
- 20. Windows Mobile:我怎麼知道我是否安裝了GPS?
- 21. 我怎麼知道一個對象是否是唯一的
- 22. 我怎麼知道QTreeView是空的?
- 23. 我怎麼能檢查是否WCF已經與IIS
- 24. 是否有可能知道我們是否已經在iframe中了
- 25. 我不知道如何驗證電話號碼是否已經存在。我只是一個新手,我不知道該怎麼做
- 26. 我怎麼知道我的Perl模塊是否包含在-M下?
- 27. 我怎麼知道一個類的實例是否已經存在於內存中?
- 28. spring + hiberante:我怎麼知道spring是否已經獲得了所有的@transactional註釋
- 29. 我怎麼知道一個Android應用第一次被加載?
- 30. 我們怎麼知道iphone已經從互聯網上獲得信息?
是的,你可以,它會工作 – tomexsans 2013-02-18 23:41:28