2013-02-25 187 views
0

我在localhost上運行我的CakePHP項目。當我填寫表格,點擊提交按鈕後顯示以下錯誤:數據源丟失

Missing Datasource Configuration

Error: The datasource configuration Array was not found in database.php.

我其實是一個數據源配置它,它看起來像:

類DATABASE_CONFIG {

public $default = array(
     'datasource' => 'Database/Postgres', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'arwinder', 
     'password' => 'root', 
     'database' => 'sh_db', 
     'prefix' => '', 
     //'encoding' => 'utf8', 
); 

public $test = array(
     'datasource' => 'Database/Postgres', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'arwinder', 
     'password' => 'root', 
     'database' => 'sh_db', 
     'prefix' => '', 
     //'encoding' => 'utf8', 
); 

} 。 ..但它被忽略。

+0

其實我配置它,它看起來像: 公共$默認=陣列( \t \t '數據源'=>'數據庫/ Postgres的, \t \t '執着'=>假, \t \t '主機'= > '本地主機', \t \t '登錄'=> 'arwinder', \t \t '密碼'=> '根', \t \t '數據庫'=> 'sh_db', \t \t '前綴'=>' ', \t \t //'encoding'=>'utf8', \t); 但它被忽略。 – 2013-02-25 17:31:44

+0

請使用您問題下方的「編輯」鏈接。 – 2013-02-25 17:32:45

+0

請告訴我解決方案。 – 2013-02-25 17:40:57

回答

0

我在嘗試使用數據衛生時遇到過類似的問題(這是一個奇怪的用例,我能說什麼)。

sanitize::escape文檔說,

"The name of the database to quote the string for, as named in your app/Config/database.php file."

它不,事實上,採取例如數據庫的名稱。 'mydatabase'也不接受主機,例如。 'localhost',也不接受'數據源',例如。 'Database/Mysql'。當給出任何這些VALUES時,你會得到問題中提到的錯誤。

實際需要的是要使用的「數據源」的名稱。再一次,'數據源'的文檔無法回答這個話題。

我被難住了。所以我搜索了這個錯誤,並發現這個未答覆的帖子。

我終於找到了徹底剪切啞運氣的解決方案,因爲這篇文章仍然是Google上這個錯誤的最高結果,所以我回過頭來回答。

你實際需要的是上面提到的配置文件中列出的變量名(鍵值不是值)。例如。 $ default或$ test或$ what_have_you。然後根據主機名提供'默認','測試'或'what_have_you'。

這是最令我驚奇的東西。如果數據源從「生產」更改爲「測試」,並且「local_dev」知道在任何給定時間使用哪個數據源對於進行Sanitize:escape()工作至關重要。

但是堅持一秒鐘...如果你這樣做,你基本上使用構造函數方法將數據源設置爲$ default as documented here on SO所以在所有的實際中,這個神祕的'數據源'幾乎總是'默認'除非它在飛行中被設置爲覆蓋,在你的模型中,無論如何你都需要進行手動查詢。

事實上,這個參數的默認值確實是'default'。它根本不是必需的參數,但是由於文檔沒有列出它是可選的,或者提供了定義的默認參數(在特定頁面上),人們可能會認爲它是必需的。

無論如何,答案是不提供$ datasource,除非您正在使用$useDBConfig在模型中指定不同的數據源。