我在localhost上运行CakePHP项目。填写表单后,单击“提交”按钮后会显示以下错误:
缺少数据源配置
错误:未找到数据源配置数组 database.php中。
我实际配置了一个数据源,它看起来像:
class 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 :(得分:0)
在尝试使用数据卫生时遇到了类似的问题(这是一个奇怪的用例,我能说什么)。
sanitize::escape的文档说明了
“引用字符串的数据库的名称,如您所指定的那样 app / Config / database.php文件。“
事实上,它并没有采用数据库的名称,例如。 'mydatabase'也不接受主机,例如。 'localhost',也不接受'datasource',例如。资料库/ MySQL的“即可。当给出任何这些VALUES时,您会收到问题中提到的错误。
您实际需要的是要使用的“数据源”的名称。同样,“数据源”的文档无法回答这个主题。
我很难过。所以我搜索了这个错误,发现了这个未经回答的帖子。
我终于找到了彻底解决这个问题的解决方案,因为这篇文章仍然是谷歌出现此错误的最高结果,我回来回答它。
您实际需要的是上面提到的配置文件中列出的变量名称(键而不是值)。例如。 $ default或$ test或$ what_have_you。然后根据主机名提供“default”,“test”或“what_have_you”。
这是最让我难以置信的事情。如果数据源从'production'变为'testing',并且'local_dev'知道在任何给定时间使用哪一个对于使Sanitize:escape()工作至关重要。
但是等一下......如果你这样做,你基本上使用构造函数方法as documented here on SO将数据源设置为$ default所以实际上,这个神秘的'数据源'几乎总是会是'默认',除非它在您的模型中动态设置,作为覆盖,无论如何您在为手动查询进行消毒时都会知道。
实际上,此参数的默认值确实是'default'。它根本不是必需的参数,但由于文档没有将其列为可选参数或提供已定义的默认参数(在该特定页面上),因此可能认为它是必需的。
无论如何,答案是不提供$ datasource,除非您使用$useDBConfig在模型中指定不同的数据源。