CakePHP:访问database.php值

时间:2009-07-27 07:13:12

标签: php cakephp

我需要从我的一个控制器中检索CakePHP的配置文件database.php中的值。

我正在维护一个前雇员的代码,所以我不肯定这有多少坚持默认结构。我希望这是相当简单的,但我似乎无法向谷歌提供正确的信息。

文件:app / config / database.php

class DATABASE_CONFIG
{
    var $db1 =
        array('driver' => 'mysqli',
              'connect' => 'mysql_connect',
              'host' => 'localhost',
              'login' => 'username',
              'password' => 'password',
              'database' => 'schema',
              'prefix' => '');
}

文件:app / controllers / my_controller.php

// here is where I need to retrieve
// the database login and password values

我可以在这里使用什么语法?甚至可以检索这些值,还是只能访问CakePHP框架的内容?

5 个答案:

答案 0 :(得分:15)

$fields = get_class_vars('DATABASE_CONFIG')

echo $fields['db1']['login'];

答案 1 :(得分:8)

好吧,我不得不说上面的答案比我一直使用的方法更快更简单,但仅仅是为了论证:

    App::Import('ConnectionManager');
    $ds = ConnectionManager::getDataSource('default');
    $dsc = $ds->config;

    echo $dsc['host'];
    echo $dsc['login'];
    echo $dsc['password'];
    echo $dsc['database'];

我想如果有什么可以保护你的代码免受'DATABASE_CONFIG'类名称的更改。

答案 2 :(得分:6)

我知道这是一篇旧帖子,但我发现有一种方法可以在不使用get_class_vars()函数的情况下列出DATABASE_CONFIG类中的所有项目。

我认为get_class_vars()仅适用于公共课程。

http://api.cakephp.org/2.4/class-ConnectionManager.html#_enumConnectionObjects

App::uses('ConnectionManager', 'Model');
$dataSource = ConnectionManager::enumConnectionObjects();

应列出所有内容,实际上它的输出与@RaYell答案相同。

答案 3 :(得分:0)

$ds = ConnectionManager::getDataSource('default')->config;
echo $ds['login'];

答案 4 :(得分:0)

但是从CakePHP 2.1及更高版本开始,给定的解决方案不起作用,因为Cake版本2.x有一些重大变化。对于Cake 2.1及以上版本,以下方法应该像我测试的那样工作。

App::uses('ConnectionManager', 'Model');
$ds = ConnectionManager::getDataSource('default');
$user = $ds->config['login'];

您可以在以下链接中找到其他选项:

How Can I Read the DB Configuration Settings From a Cake Shell?