Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: YII: Изменения конфигурационного файла из админки приложения
Форумы портала PHP.SU » » CMS и фреймворки » YII: Изменения конфигурационного файла из админки приложения

Страниц (1): [1]
 

1. NeuroZ - 27 Марта, 2014 - 09:46:26 - перейти к сообщению
Не могу найти решения. Перечитал много статей на хабре - везде вокруг, да около.
Суть задачи:
Есть приложение с модулем админки. Я хотел бы иметь возможность менять хост, логин, пароль к бд (и прочие данные из конфигурационного файла) из модуля админки.
Мне не понятно - как правильно извлечь необходимые значения и перезаписать их при необходимости?

p.s. Просто не хочу сооружать кривокод, поэтому и хочу услышать совет профессионалов.
2. esterio - 27 Марта, 2014 - 10:07:00 - перейти к сообщению
ну например так
PHP:
скопировать код в буфер обмена
  1.         'connectionString' => 'mysql:host=localhost;dbname=tests;',
  2.         'username' => 'root',
  3.         'password' => '',
  4. )));
  5.  
  6. return array(
  7.         'components' => array(
  8.                 'db' => unserialize(file_get_contents('db.cfg'))
  9.         )
  10. );


там есть еще мердж конфигов и много другого

http://www[dot]yiiframework[dot]com/wiki/?tag=config
http://www[dot]yiiframework[dot]com/wiki[dot][dot][dot]only-with-files/
3. NeuroZ - 27 Марта, 2014 - 10:31:34 - перейти к сообщению
esterio пишет:
там есть еще мердж конфигов и много другого

Ну с мерджем я вроде разобрался - это не совсем то, что нужно.

А вот данный пример очень похож на то, что ищу.
Но. У нас в конфиге также содержаться и множество других данных. Например подключаемые модули и т.п.
Т.е. получается нам сначала нужно извлечь все данные из файла, а потом перезаписать его, но с уже измененными данными. Как в таком случае быть? Возможно ли все данные из файла записать в соответствующий массив?
Иными словами выолнить что-то вроде
PHP:
скопировать код в буфер обмена
  1. $arr = file_get_contents('main.php');
  2. foreach ($arr as $tempArr) {}
4. esterio - 27 Марта, 2014 - 10:44:52 - перейти к сообщению
ну так получите весь массив и мердж конфигов, там ничего сложного нету, я привел только для DB, но ничто не мешает весь массив components
5. NeuroZ - 27 Марта, 2014 - 10:51:53 - перейти к сообщению
esterio пишет:
ну так получите весь массив и мердж конфигов, там ничего сложного нету, я привел только для DB, но ничто не мешает весь массив components

Так в Вашем примере нет конкретно получения массива. Вы просто в ручную создаете конфиги базы и записываете их в пустой (или пока не существующий) файл. А если в файле уже есть какие-то данные (мы не знаем какие именно) - допустим мы их вытащим как в моем примере, но это будет лишь текстовая строка. А как получить из файла реальный массив?
p.s. Да, и для чего вообще мы выполняем serialize?
6. esterio - 27 Марта, 2014 - 10:58:40 - перейти к сообщению
UPDATE
PHP:
скопировать код в буфер обмена
  1.         'db' => array(
  2.                 'connectionString' => 'mysql:host=localhost;dbname=tests;',
  3.                 'username' => 'root',
  4.                 'password' => '',
  5.         )
  6. )));
  7.  
  8.  
  9.  
  10. $config = array(
  11.         'components' => array(
  12.                 'urlManager' => array(
  13.                         'urlFormat' => 'path',
  14.                 )
  15.         )
  16. );
  17.  
  18. $config['components'] = array_merge($config, unserialize(file_get_contents('my.cfg')));
  19. return $config;



Также сюда загляните
http://www[dot]yiiframework[dot]com/doc/api/1[dot]1/CMap
7. NeuroZ - 27 Марта, 2014 - 12:08:48 - перейти к сообщению
Спасибо за советы

 

Powered by ExBB FM 1.0 RC1