使用thinkphp3.2版本
\Home\Controller目錄下,建立TestoneController繼承了Controller,其中有一個index方法。建立了一個TestoneModel繼承了Model,設定一個test方法。兩個類如:
之後訪問Testone模組的index方法,url:
http://localhost/weixin/index.php/Home/Testone/index
報錯如下:
之後,嘗試讓TestModel不繼承Model後
再次訪問
http://localhost/weixin/index.php/Home/Testone/index
訪問成功
但是按照官方手冊,不是應該需要繼承嗎?希望能給我解答下關於命名空間也好,繼承也好,這是怎麼一回事?
回複內容:
使用thinkphp3.2版本
\Home\Controller目錄下,建立TestoneController繼承了Controller,其中有一個index方法。建立了一個TestoneModel繼承了Model,設定一個test方法。兩個類如:
之後訪問Testone模組的index方法,url:
http://localhost/weixin/index.php/Home/Testone/index
報錯如下:
之後,嘗試讓TestModel不繼承Model後
再次訪問
http://localhost/weixin/index.php/Home/Testone/index
訪問成功
但是按照官方手冊,不是應該需要繼承嗎?希望能給我解答下關於命名空間也好,繼承也好,這是怎麼一回事?
我按照你的代碼測試了一次發現沒問題,是不是因為你前面用了D方法執行個體化模型留下緩衝?
public function __construct($name='',$tablePrefix='',$connection='') { // 模型初始化 $this->_initialize(); // 擷取模型名稱 if(!empty($name)) { if(strpos($name,'.')) { // 支援 資料庫名.模型名的 定義 list($this->dbName,$this->name) = explode('.',$name); }else{ $this->name = $name; } }elseif(empty($this->name)){ $this->name = $this->getModelName(); } // 設定表首碼 if(is_null($tablePrefix)) {// 首碼為Null表示沒有首碼 $this->tablePrefix = ''; }elseif('' != $tablePrefix) { $this->tablePrefix = $tablePrefix; }elseif(!isset($this->tablePrefix)){ $this->tablePrefix = C('DB_PREFIX'); } // 資料庫初始化操作 // 擷取資料庫操作對象 // 當前模型有獨立的資料庫連接資訊 $this->db(0,empty($this->connection)?$connection:$this->connection,true);}model 的構造方法 最後串連了資料庫一般做法是一個 model 對應一個資料庫表
經過測試你的代碼沒有任何的問題:
test(); }}?>
輸出結果:
Model類在執行個體化的時候預設會連結資料庫,並且尋找和類名相同的表名,如果你在此之前沒有添加對應的表會報錯
如你的Model為:TestOneModel
,資料庫應該存在:xx_test_one表.
http://www.kancloud.cn/manual/thinkphp/1728
出現這個錯誤的原因是資料庫未配置
config.php裡配置
//資料庫配置資訊'DB_TYPE' => 'mysql', // 資料庫類型'DB_HOST' => '127.0.0.1', // 伺服器位址'DB_NAME' => 'thinkphp', // 資料庫名'DB_USER' => 'root', // 使用者名稱'DB_PWD' => '123456', // 密碼'DB_PORT' => 3306, // 連接埠'DB_PARAMS' => array(), // 資料庫連接參數'DB_PREFIX' => 'think_', // 資料庫表首碼 'DB_CHARSET'=> 'utf8', // 字元集'DB_DEBUG' => TRUE, // 資料庫偵錯模式 開啟後可以記錄SQL日誌
並且資料庫要有首碼_test_one
表