Ищете идеи / решения для управления настройками приложения - PullRequest
3 голосов
/ 30 августа 2009

Я строю MVC-фреймворк в PHP, который должен будет установить ряд переменных / констант конфигурации по умолчанию. Примером конфигурационных переменных будет, где сохранять файлы журнала, регистрировать ли запросы, настройки Doctrine и многие другие. Поскольку я хочу, чтобы разработчики могли создавать новые проекты с минимальными усилиями, эти конфигурационные переменные должны иметь значения по умолчанию. Однако, чтобы сделать эту среду действительно полезной, мне нужно, чтобы они могли переопределять эти значения по умолчанию либо в файле начальной загрузки проекта, либо в контроллере или модели. Я хотел бы использовать константы, но они не могут быть перезаписаны. Мне кажется, что должно быть простое решение, которого я просто не вижу (возможно, шаблон дизайна?). Любой совет будет с благодарностью, спасибо.

Ответы [ 4 ]

5 голосов
/ 30 августа 2009

В такой ситуации я бы, наверное,:

  • Создать класс, который будет заниматься всем, что связано с конфигурацией
    • Этот класс будет содержать методы для получения / установки параметров конфигурации; все, что нужно вашему приложению
    • Это также будет определять значения по умолчанию, когда это необходимо
  • Используйте файл .ini или .xml, в котором значения конфигурации могут быть переопределены

При создании экземпляра класса:

  • У вас уже есть значения по умолчанию
  • Вы анализируете файл .ini или .xml
  • Каждое значение, определенное в этом файле конфигурации, используется для переопределения соответствующего значения по умолчанию, которое определено в классе.


Решение немного более сложное, но, возможно, лучше, может быть:

  • Все еще имеет этот класс конфигурации, но не использует его для хранения значений по умолчанию
  • Имеется один файл .ini или .xml для хранения значений по умолчанию
  • Имеется один файл .ini или .xml, в котором пользователи могут переопределять значения, определенные в файле по умолчанию
  • Загрузить файл, содержащий значения по умолчанию, а затем файл, содержащий конкретные значения

Преимущества этого решения:

  • В классе PHP не хранится значение конфигурации
  • Все параметры конфигурации, которые могут быть переопределены, уже определены в файле .ini / .xml, что означает, что людям просто нужно скопировать / вставить строку в свой конкретный файл, чтобы переопределить: не нужно смотреть на PHP класс и подумайте "как мне перевести это в файл конфигурации?"


Еще пара заметок:

  • Возможно, вы захотите использовать какой-нибудь механизм кэширования, чтобы не повторять анализ файлов при каждом запросе
  • Zend_Config и Zend_Config_Ini могут быть полезны; даже если вы их не используете, так как вы пишете свою собственную платформу, вы можете взглянуть на то, что они делают - если я правильно помню, Zend_Config_Ini допускает иерархию и наследование в файлах .ini

Веселись!

2 голосов
/ 30 августа 2009

Я бы предложил использовать несколько файлов ini: default.ini, а затем столько override.ini-s, сколько вам нужно. Затем просто загрузите их с parse_ini_file() и объедините в один конфиг с array_merge(). Быстро и просто.

1 голос
/ 30 августа 2009

На этот вопрос можно найти самые разные ответы. Моя личная рекомендация - хранить значения в SQLite и иметь отдельный скрипт для доступа и изменения этих значений. По другому пути продолжайте читать.

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

Большинство приложений, которые следуют этому маршруту, реализуют его с подробным объяснением

<?php
/**
 * Global application configuration
 */
class AWConfig {

    /**
     * true or false
     * If the is set to true debug messages will be added to the application logs
     */
    public $DEBUG_MODE = true;
    /**
     * Path to Station database
     * ex (/homepages/26/3/htdocs/databases/stations.db)
     */
    public $DB_STATION = '/homepages/26/3/htdocs/databases/stations.db';
    /**
     * Path to logs database
     * ex (/homepages/26/3/htdocs/databases/stations.db)
     */
    public $DB_LOGS = '/homepages/26/d175338743/htdocs/weather/dev/metrics/beta2/databases/metriclogs.db';

    /**** DO NOT EDIT BELOW THIS LINE *****/
    public $LIST_STATION_LIMIT = 10;
    public $MAX_COMPARE = 6;
}
?>

Если вы хотите скрыть эти данные от пользователя, лучше всего будет использовать сценарий начальной установки, который запросит у пользователя подробности и запишет файл (config.php, config.ini, config.xml или в базу данных). настройки они выбрали. Затем другой сценарий для редактирования в будущем. Хороший пример - Joomla CMS.

1 голос
/ 30 августа 2009

Вот шаблон дизайна, который я бы использовал. Я бы создал простой класс для облегчения этого:

class Configuration {
   String get($key) {...}
   String set($key, $value) {...}
}

Начальная реализация может быть жестко запрограммирована со значениями по умолчанию. Позже, однако, вы можете добавить чтение файла конфигурации сервера и / или проекта. Это даст вам возможность добавлять по мере необходимости.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...