[英]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'];
您可以在以下链接中找到其他选项:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.