我們簡單認識一下CI框架的MVC。示例代碼如下
//CI控制器文件Home.php <?php defined('BASEPATH') OR exit('No direct script access allowed'); //為了防止用戶直接通過文件路徑來訪問控制器,可以有效的防止跨站攻擊 class Home extends CI_Controller{ //繼承CI控制類,必須存在的 public function __construct(){ parent::__construct(); $this->load->model('Home_model'); //加載Model模型類 } public function index(){ echo 'Home頁面'; $this->load->View('home/index'); //渲染home下的index視圖頁面,View可以小寫 }
//CI模型類文件Hone_model.php <?php class Home_model extends CI_Model { function __construct() { parent::__construct(); $this->load->database(); // 加載數據庫 } }
頁面效果
碰到的問題解決:
1,在Linux部署訪問CI時出現錯誤 Unable to locate the model you have specified:*_model 時
解決方法:出現上述問題是沒有找到指定的模型類,主要原因是因為在window環境下代碼不區分大小寫,所以默認model類文件名我小寫,但文件中類名必須要為大寫的,當我們將項目加載移植到Linux環境下時,Linux環境區分大小寫,所以導致類文件沒能找到,出現該問題,我們要修改模型類文件名和控制器中的加載名保持一致,要么全小寫要么首字母大寫,其余字母全小寫。模型類中的類名要保證是首字母大寫,其余小寫的格式。
例如上例就保證了$this->load->model('Home_model'); 的加載名和模型類文件名一致都是Home_model。
2,出現錯誤Message: Undefined property: Home::$load
解決方法:出現上述問題是因為我們定義的控制器文件名(類名)使用了CI里的關鍵字導致命名沖突,解決方法有兩個,第一種修改控制器文件名和類名(此方法相對比較麻煩,我們推薦第二種方法) ,第二種在控制器種添加一個構造函數,寫法如下
public function __construct(){ parent::__construct(); }