Как установить Zend_Application с application.ini и user.ini

Я использую Zend_Application, и он не чувствует себя хорошо, что я смешиваю в своем application.ini и приложение и пользовательскую конфигурацию.

То, что я имею в виду с этим, следующее. Например, для моего приложения нужны некоторые классы библиотеки в пространстве имен MyApp_. Таким образом в application.ini я поместил autoloaderNamespaces [] = "MyApp _". Это - чистая конфигурация приложения, никто кроме программиста не изменил бы их. С другой стороны, я поместил там конфигурацию базы данных, что-то, что изменит SysAdmin.

Моя идея состоит в том, что я разделил бы опции между application.ini и user.ini, где опции в user.ini берут предпочтение (таким образом, я могу определить стандартные значения в application.ini).

Действительно ли это - хорошая идея? Как я могу лучше всего реализовать это? Идея, которую я имею,

  • Расширение Zend_Application для взятия нескольких файлов конфигурации
  • Создание init функционировать в моей Начальной загрузке user.ini
  • Парсинг файлов конфигурации в моем index.php и передаче они к Zend_Application (звучит ужасным),

Что я сделаю? Я хотел бы иметь 'самое чистое' решение, которое подготовлено к будущему (более новые версии ZF и другие разработчики, работающие над тем же приложением)

5
задан Peter Smit 11 January 2010 в 08:08
поделиться

6 ответов

Я нашел решение этой проблемы, который может быть новым для Framework версии 1.10. При создании объекта Application Application вы можете пройти в 2 пути конфигурации файлов в массиве параметров, которые объединяются вместе:

$application = new Zend_Application(
    APPLICATION_ENV,
    array(
        'config' => array(
            APPLICATION_PATH . '/configs/application.ini',
            APPLICATION_PATH . '/configs/user.ini'
        ),
    )
);
10
ответ дан 18 December 2019 в 07:29
поделиться

Вы можете обеспечить метод Bootstrap _initConfig (), призывающую перед другими, указав в других методах Bootstrap (которые требуют объекта Config) что-то вроде:

$this->bootstrap('config');

более полный пример (контекст Класс Bootstrap):

protected function _initConfig() {
    $config = new Zend_Config_Ini('[filename]');
    Zend_Registry::set('config',$config);
}

protected function _initSomething() {
    $this->bootstrap('config');
    $config = Zend_Registry::get('config');
    // you can now do whatever you like with the $config object
}

Обновление:

Как уже упоминалось в других ответах, если конфигурация требуется только в загрузке, я бы сказал, чтобы использовать $ this-> getResource ('config' ) Метод. Я использую реестр, так что Config можно легко получить доступ к другим частям моего приложения.

-1
ответ дан 18 December 2019 в 07:29
поделиться

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

. Я сделал это на самом деле таким образом:

внутри index.php для загрузки приложения

     $application = new Zend_Application(APPLICATION_ENV, array(
                'resources' => array(
                   'FrontController' => array(
                       'controllerDirectory' => APPLICATION_PATH . '/main/controllers',
                    ),
                'layout' => array(
                    'layoutpath' => APPLICATION_PATH . "/layouts/scripts"
                    ),
                ),
            ));

and then inside the bootstrap parse the config.ini inidependently

    protected function _initConfigFile() {
        try {
            $configuration = new Zend_Config_Ini(
                APPLICATION_PATH . '/config/app.ini',
                APPLICATION_ENV );
            $registry->configuration = $configuration;
        } catch (Zend_Exception $zExp) {
            echo "Could not read application ini file (app.ini). "
                . " Please check that it exists and has the appropriate structure.\n";
            echo("\n");
            var_dump($zExp);
            exit(1);
        }
    }

внутри бутстрапа

0
ответ дан 18 December 2019 в 07:29
поделиться

Нет ничего плохого в этом, я делаю что-то подобное. Я предлагаю использовать ваш второй выбор. У меня просто есть метод _initConfig (), который заботится о загрузке пользовательского конфигурации с помощью zend_config_ini. Я бы не продлил Zend_app, это кажется немного много.

Редактировать:

В ответ на ваш комментарий вы просто сделаете:

$this->bootstrap('config');

Таким образом, чтобы убедиться, что конфигурация загружается до DB, у вас есть что-то вроде:

protected function _initConfig()
{
    $config = new Zend_Config_Ini('/path/to/user.ini');
    return $config;
}

protected function _initDb()
{
    $this->bootstrap('config');
    $config = $this->getResource('Config');

    /* ... */
}

нет необходимости использовать Zend_registry что-нибудь возвращено методом Bootstrap _init, доступно с использованием GetResource ()

5
ответ дан 18 December 2019 в 07:29
поделиться

Файл конфигурации может иметь элемент «Config», который относится к другому файлу конфигурации. Zend_Application будет включать в себя этот файл конфигурации. Включенный конфигурационный файл будет иметь предпочтение и перезаписать ключевые ключи, уже определенные в стандартном файле конфигурации.

Вчера была также запущена нить на списке Zend Framework Meading Mex

Примеры

Application.ini:

[production]
config = APPLICATION_PATH "/configs/config.ini"
resources.db.adapter = "Mysqli"
resources.db.host = "localhost"

Config.ini:

[production]
resources.db.host = "mysql.server.com"
resources.db.username = "myuser"

Public / index.php:

$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
1
ответ дан 18 December 2019 в 07:29
поделиться

вы знаете, что это объединит столько inis, сколько вы хотите?

в application.ini

[production]
config[] = APPLICATION_PATH "/configs/dsn.ini"
config[] = APPLICATION_PATH "/configs/error.ini"
...
6
ответ дан 18 December 2019 в 07:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: