数据源丢失

时间:2013-02-25 17:26:34

标签: cakephp

我在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',
);

} ......但它被忽略了。

1 个答案:

答案 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在模型中指定不同的数据源。