Zend config наследование - PullRequest
       19

Zend config наследование

0 голосов
/ 16 октября 2011

У меня есть эти значения в моем application.ini

[production]
; Database;
    resources.db.adapter = "pdo_mysql"
    resources.db.params.host = "localhost"
    resources.db.params.username = "user1"
    resources.db.params.password = "password1"
    resources.db.params.dbname = "projects__01"


;Names
    website.settings.websiteName = "My website 1"
    website.settings.websiteUrl = "http://www.mydomain1.com"
    website.settings.title = "mydomain.com - mydomain"
    website.settings.titleSeperator = " - "


[staging : production]
; Database;
    resources.db.adapter = "pdo_mysql"
    resources.db.params.host = "localhost"
    resources.db.params.username = "user2"
    resources.db.params.password = "password2"
    resources.db.params.dbname = "projects__02"

;Exceptions
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
    resources.frontController.params.displayExceptions = 1

;Title and url
    website.settings.websiteName = "My website 2"
    website.settings.websiteUrl = "http://www.mydomain2.com"


[development : staging]
;Database
    resources.db.adapter = "pdo_mysql"
    resources.db.params.host = "localhost"
    resources.db.params.username = "user3"
    resources.db.params.password = "password3"
    resources.db.params.dbname = "projects__03"


;Title and url
    website.settings.websiteName = "My website 3"
    website.settings.websiteUrl = "http://www.mydomain3.com"

Проблема в том, что все значения базы данных и исключений работают правильно, а это означает, что они наследуются должным образом, как и должно

Но значения, которые я установил для Title и url, не наследуются должным образом, используются только первые определенные.

Почему это? это по замыслу? наследуются только предопределенные / стандартные значения среды, такие как база данных и исключения?

Или я где-то ошибаюсь?

1 Ответ

1 голос
/ 20 октября 2011

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

$config = new Zend_Config_Ini(APPLICATION_PATH.'/configs/application.ini');

но то, что вы должны иметь, больше похоже на это:

$config = new Zend_Config_Ini(APPLICATION_PATH.'/configs/application.ini', APPLICATION_ENV);

второй параметр сообщает ему, какой раздел конфигурационного файла использовать, без этого он всегда получит одно и то же значение.

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

protected function _initConfig()
{
    $config = new Zend_Config($this->getOptions());
    Zend_Registry::set('config', $config);

    return $config;
}

и это должно работать так, как вы ожидаете.

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

...