Zend Framework отделяет информацию о среде разработчика от конфигурации? - PullRequest
6 голосов
/ 28 июля 2011

Я только начинаю с большого проекта Zend Framework.Пока меня смущает одна вещь: большая часть конфигурации, кажется, хранится в одном файле на application/configs/application.ini.Этот файл включает в себя различные вещи, необходимые для работы приложения, такие как пространство имен приложения, плагины контроллера и т. Д., А также данные для входа в базу данных.У меня есть несколько внешних подрядчиков, которые мне нужны для работы над этим проектом, но я не хочу, чтобы у них были все детали моей базы данных.В Zend, как вы отделяете информацию о среде, такую ​​как логины базы данных (которая может отличаться для разных разработчиков), от конфигурации приложения (которая будет одинаковой для всех)?

Ответы [ 4 ]

8 голосов
/ 05 августа 2011

Я согласен, что в ZF это сложнее, чем должно быть, надеюсь, это область, которая будет улучшена в будущих версиях.

Между тем, довольно легко объединить два конфигурационных файла с Zend_Configи это то, что вы можете использовать в своих интересах.Если вы откроете public/index.php, вы увидите раздел внизу, где он создает экземпляр Zend_Application.По умолчанию вторым параметром является полный путь к вашему файлу конфигурации, но вы можете вместо этого передать существующий объект Zend_Config.Таким образом, вы создаете два объекта конфигурации: application.ini и environment.ini (называйте это как хотите), объединяете их вместе и затем передаете в Zend_Application:

$config = new Zend_Config_Ini(
    APPLICATION_PATH.'/configs/application.ini', 
    APPLICATION_ENV, 
    array('allowModifications' => true)
);
$environment = new Zend_Config_Ini(
    APPLICATION_PATH.'/configs/environment.ini', 
    APPLICATION_ENV
);

$config->merge($environment);

$application = new Zend_Application(APPLICATION_ENV, $config);
$application->bootstrap()
            ->run();

При таком подходе вы сохраняете всестандартные вещи в application.ini и перенесите свою базу данных в environment.ini.Затем вы сохраняете application.ini в системе управления версиями, добавляете environment.ini в gitignore / svn: ignore и создаете фиктивный файл environment.ini.dist, который ваши другие разработчики могут использовать для настройки своих локальных проектов.

Примечание:Если вы закомментировали вызовы require_once в файлах библиотеки ZF по соображениям производительности, вам может потребоваться использование некоторых классов Zend_Config в public / index.php, чтобы это работало.Это должно быть очевидно из ошибок.

5 голосов
/ 28 июля 2011

То, что я делаю для Symfony и Zend, не проверяет конфигурационные файлы с такой информацией.

Вместо этого я делаю config.dist файл, который я храню в SVN / Git, в котором есть вся необходимая информация для запуска приложения, а затем фиктивная информация для конфиденциальных учетных данных, а что нет. Затем на каждом компьютере (локальный dev, production, staging) я копирую этот файл в реальное имя файла cnfig и редактирую его с соответствующими деталями среды.

1 голос
/ 28 июля 2011

Я использую файлы конфигурации на основе PHP следующим образом (application.php):

<?php
return array_merge_recursive(array(
    'bootstrap' => array(
        'phpSettings' => array(
            'display_startup_errors' => 0,
            'display_errors' => 0
        ),
    'path' => APPLICATION_PATH . '/Bootstrap.php',
        'class' => 'Bootstrap',
    )
    /** all other general config stuff as well **/
), include APPLICATION_PATH . '/configs/' . APPLICATION_ENV . '.php');

И один для конкретной среды (например, development.php):

<?php
return array(
    'phpSettings' => array(
        'display_startup_errors' => 1,
        'display_errors' => 1,
        'error_reporting' => E_ALL,
    ),
    'resources' => array(
        /** log to browser only for development environment **/
        'log' => array(
            'Firebug' => array(
                'writerName' => 'Firebug',
                'filterName' => 'Priority',
                'filterParams' => array(
                    'priority' => Zend_Log::DEBUG
                )
            )
        ),
        'db' => array(
              /** Development Database settings, only need to overwrite the new ones **/
        )
    )
);

Идея, украденная с этой страницы (вы, конечно, потом включили бы development.php в игнорирование).

0 голосов
/ 28 июля 2011

Вы можете создать два ini файла в application/configs.Первый файл, application.ini, содержит большую часть ваших шаблонных настроек.Второй файл, secrets.ini содержит пароли вашей базы данных и другие вещи, которые вы не хотите проверять в системе контроля версий.Теперь вы можете проверить свой файл application.ini в системе контроля версий.Не регистрируйте secrets.ini - заставьте свою VCS игнорировать его - и заставляйте каждого разработчика создавать этот файл с нуля в своих личных проверках.

Затем вы можете написать метод в своем application/Bootstrap.phpкласс для чтения обоих файлов, объединения их в один объект Zend_Config и записи этого объекта в Zend_Registry.

Я не думаю, что это решение идеально, но оно работало для меня в прошлом.

...