CakePHP: доступ к значениям database.php

Мне нужно получить значения из конфигурационного файла CakePHP database.php с одного из моих контроллеров.

Я поддерживаю код ex-employee, поэтому я не уверен, насколько он придерживается структур по умолчанию. Я надеюсь, что это довольно просто, но я не могу представить 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' => '');
}

Файл: приложение/контроллеры/my_controller.php

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

Какой синтаксис я могу использовать здесь? Возможно ли даже получить эти значения или они доступны только для кишок рамки CakePHP?

Ответы

Ответ 1

$fields = get_class_vars('DATABASE_CONFIG')

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

Ответ 2

Ну, я должен сказать, что вышеупомянутый ответ - гораздо более быстрый и простой метод, чем то, что я использовал, но просто для аргумента:

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

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

Я думаю, что если что-то это защитит ваш код от изменения имени класса DATABASE_CONFIG.

Ответ 3

Я знаю, что это старый пост, но я только узнал, что есть способ перечислить все элементы класса 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.

Ответ 4

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

Ответ 5

Но из CakePHP 2.1 и выше данное решение не будет работать, так как есть некоторые большие изменения от Cake версии 2.x. Для Cake 2.1 и выше следующий способ должен работать, когда я тестировал.

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

Другие варианты вы можете найти по следующей ссылке:

Как просмотреть настройки конфигурации базы данных из оболочки Cake?