Динамический файл конфигурации с расширенным шаблоном

Я хочу создать файл конфигурации динамически, как во время выполнения. У меня есть таблица с именем Settings в базе данных. Его структура такая:

|Column     |Type    |Length|
|id         |int     |11    |
|key        |varchar |100   |
|value      |varchar |255   |
|created_at |datetime|      |
|updated_at |datetime|      |

Теперь, когда приложение запускается в первый раз, оно должно проверять, подключено ли оно к базе данных или нет. Если нет, то его следует перенаправить на страницу installer. Где пользователь введет необходимые данные, и файл конфигурации будет сгенерирован соответствующим образом, и те же данные будут сохранены в таблице Settings для будущего использования.

Я не хочу жестко записывать какие-либо значения в файл конфигурации. Итак, как я могу выполнить эту задачу? Любые идеи?

Я придумал идею. Что, если я проверю файл params-local.php на наличие параметра с именем installed со значением true. Если он существует, мы говорим, что приложение было успешно установлено, иначе мы переводим пользователя на страницу installer.


person Abhimanyu Saharan    schedule 25.01.2015    source источник
comment
Чего вы пытаетесь достичь, имея динамический файл конфигурации? Если вы хотите, чтобы одно и то же приложение Yii использовало разные конфигурации, скажем, для разных пользователей, в первую очередь потребуется конфигурация для создания экземпляра.   -  person deacs    schedule 26.01.2015
comment
@deacs Мы пытаемся создать автоустановщик для нашего приложения, в котором параметры, жестко закодированные в main-local.php и params-local.php, должны быть изменяемыми во время выполнения.   -  person Abhimanyu Saharan    schedule 26.01.2015


Ответы (1)


Вы всегда можете использовать замыкания (анонимные функции), чтобы получить любые параметры, которые вы хотите, в любое место, которое вы хотите.

См. здесь: Многопользовательская настройка нескольких баз данных

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

Если вы действительно хотите ускорить работу в файле index.php, при чтении конфигурации вы можете создать свой собственный массив конфигурации любым удобным для вас способом (я бы все равно использовал memcached) и запустить приложение с этой конфигурацией. Файлы конфигурации — это просто массивы, которые используются при запуске приложения.

Во-первых, вы, вероятно, не можете использовать какие-либо специальные функции yii в любом месте, потому что приложение Yii будет доступно до тех пор, пока вы его не запустите (я имею в виду конфигурацию), поэтому вам, возможно, придется создавать функции непосредственно в PHP.

person Mihai P.    schedule 27.01.2015
comment
Я также думал о том же, чтобы создать свои собственные файлы конфигурации. Кроме того, я начал работать над начальным шаблоном (расширенным), в котором будет графический интерфейс для настройки приложения. Я все еще застрял в том, как приложение узнает, что оно запущено в первый раз (означает, что нет соединения с базой данных или база данных вообще не существует). В последнем случае приложение проведет пользователя через процесс установки. Итак, в основном мне нужен более надежный способ справиться с этим. Если у вас есть идеи, поделитесь. Спасибо. - person Abhimanyu Saharan; 27.01.2015
comment
В ближайшее время построю что-то подобное. Из того, что я понял, мне понадобится 1 конфигурация, которая находится в файле, конфигурация базы данных. Вы можете переместить это в другой файл и проверить существование этого файла, чтобы решить, запускаете ли вы его впервые. Мы пытаемся сделать весь процесс установки автоматизированным (только командная строка), поэтому у нас не будет такой процедуры установки. - person Mihai P.; 27.01.2015