我需要从我的一个控制器中检索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框架的内容?
答案 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?