CakePHP:访问database.php值

Dre*_*awn 13 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' => '');
}
Run Code Online (Sandbox Code Playgroud)

文件:app/controllers/my_controller.php

// here is where I need to retrieve
// the database login and password values
Run Code Online (Sandbox Code Playgroud)

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

RaY*_*ell 15

$fields = get_class_vars('DATABASE_CONFIG')

echo $fields['db1']['login'];
Run Code Online (Sandbox Code Playgroud)


Iai*_*lan 8

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

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

    echo $dsc['host'];
    echo $dsc['login'];
    echo $dsc['password'];
    echo $dsc['database'];
Run Code Online (Sandbox Code Playgroud)

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


Tim*_*ber 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();
Run Code Online (Sandbox Code Playgroud)

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

  • 这个解决方案对我来说是最好的,因为它让我了解了所有当前的配置. (3认同)