2013-02-25 177 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在模型中指定不同的数据源。