2009-07-27 7 views
13

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

Я поддерживаю код ex-employee, поэтому я не уверен, насколько это относится к структурам по умолчанию. Я надеюсь, что это довольно просто, но я не могу представить Google правильную информацию.

Файл: приложение/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

** ebotunes ** ответ работает просто отлично, если вы определили некоторые новые ключи и значения внутри «$ умолчанию» массив в database.php, однако, если вы создали другой массив в database.php, как ** DreadPirateShawn ** сделал выше, вам нужно использовать ** ответ RaYell **, если вы не хотите создавать новый источник данных с помощью * connect() * метод, который возвращает true. –

ответ

15
$fields = get_class_vars('DATABASE_CONFIG') 

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

Это решение работает отлично, без необходимости настройки. Весьма признателен! – DreadPirateShawn

+1

+1 Это работает, мне не пришлось дублировать настройки, когда что-то в папке с поставщиками имело доступ к БД. –

+1

Возвращает 'false'. Вы также забыли конечную полуточку, и я не могу отредактировать сообщение, потому что изменения должны быть 6 символов или дольше. ** Тот, кто ищет способ получить определенные конфигурации (конкретный или все из них), см. Сообщение Timothy Onggowasito, поскольку это больше похоже на Cake-PHP, и это действительно работает ** –

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.

+0

Это поддерживаемый торт способ сделать это, очень приятно. – deceze

+0

Я пробовал это позже, но у меня все время возникала ошибка, когда класс «App» не был включен.Я уверен, что это должно означать что-то для меня, но мы вернулись к наследованию кода и, по общему признанию, не понимаем структурных требований. – DreadPirateShawn

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

При предоставлении кода, который решает проблему, лучше всего также дать хотя бы краткое объяснение того, как это работает, чтобы люди, читающие, не должны были мысленно разбирать его по очереди, чтобы понять различия. – Fluffeh

6

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

+0

Учитывая сходство (приложение, ConnectionManager, источник данных), этот подход сопоставим с ответом Иэна. При этом хорошо иметь дополнительную контрольную точку. – DreadPirateShawn

+3

Это решение работало лучше всего для меня, так как оно дает мне все текущие конфигурации. –

+1

Все текущие конфигурации - именно то, что мне нужно. Это должен быть принятый ответ. –

0

Но от CakePHP 2.1 и выше данное решение не будет работать, так как есть некоторые большие изменения от Cake версии 2.x. Для пирога 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?

Смежные вопросы