0

我在本地主机上运行我的 CakePHP 项目。当我填写表格时,单击提交按钮后显示以下错误:

缺少数据源配置

错误:在 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',
);

} ...但它被忽略了。

4

1 回答 1

0

在尝试使用数据清理时,我遇到了类似的问题(这是一个奇怪的用例,我能说什么)。

sanitize::escape的文档说,

“引用字符串的数据库名称,如您的 app/Config/database.php 文件中所命名。”

事实上,它并没有使用数据库的名称,例如。'mydatabase' 也不接受主机,例如。“本地主机”,也不接受“数据源”,例如。'数据库/Mysql'。当给出这些值中的任何一个时,您会得到问题中提到的错误。

您真正需要的是要使用的“数据源”的名称。同样,“数据源”的文档无法回答这个话题。

我被难住了。所以我搜索了那个错误并找到了这个未答复的帖子。

我终于找到了一个彻底的解决方案,因为这个帖子仍然是谷歌上这个错误的最高结果,所以我回来回答它。

您实际需要的是上面提到的配置文件中列出的变量名(键而不是值)。例如。$default 或 $test 或 $what_have_you。然后根据主机名提供“默认”、“测试”或“what_have_you”。

这是最让我难以置信的。如果数据源从“生产”更改为“测试”以及“本地开发”,则知道在任何给定时间正在使用哪个数据源对于使 Sanitise:escape() 工作至关重要。

但是等一下......如果你这样做,你基本上使用构造函数方法将数据源设置为 $default如此处记录的所以实际上,这个神秘的“数据源”几乎总是“默认” ' 除非它是在您的模型中动态设置的,作为覆盖,无论如何在您为手动查询进行清理时都会知道。

事实上,这个参数的默认值确实是'default'。它根本不是必需的参数,但由于文档没有将其列为可选参数或提供已定义的默认参数(在该特定页面上),因此人们可能会认为它是必需的。

无论如何,答案是不提供 $datasource 除非您已经使用$useDBConfig在模型中指定不同的数据源。

于 2013-06-19T21:05:09.953 回答