繁体   English   中英

CakePHP:访问database.php值

[英]CakePHP: Accessing database.php values

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

我正在维护前员工的代码,因此我不确定其中有多少遵循默认结构。 我希望这很简单,但是Google似乎找不到正确的信息。

文件: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框架的内脏访问?

$fields = get_class_vars('DATABASE_CONFIG')

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

好吧,我不得不说上述答案是一种比我一直在使用的方法更快,更简单的方法,但是仅出于论证的目的:

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

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

我想这是否能保护您的代码免受“ DATABASE_CONFIG”类名称的更改的影响。

我知道这是一篇老文章,但我发现没有一种方法可以列出DATABASE_CONFIG类中的所有项目,而无需使用get_class_vars()函数。

我认为get_class_vars()只能在公共类上工作。

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

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

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

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

但是从CakePHP 2.1及更高版本开始,给定的解决方案将无法正常工作,因为从Cake 2.x版本开始有一些重大更改。 对于Cake 2.1及更高版本,按我的测试,以下方法应该可以工作。

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

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

如何从Cake Shell中读取数据库配置设置?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM