Zend, Глобальная переменная в Application.ini? - PullRequest
8 голосов
/ 13 февраля 2011

У меня есть вопрос, так как мне нужна глобальная статическая переменная, и у меня есть вопрос, есть ли возможность добавить ее в файл application.ini, как это сделать?

Или я должен:

  1. Создать абстрактный класс со статической переменной,
  2. Зарегистрируйте его в Zend_Registry, чтобы иметь доступ к этой переменной из всех приложений (Зарегистрируйте его в файле Bootstrap)
  3. Я могу использоватьэто или есть проще, я имею ввиду "автоматический способ" это сделать?

Спасибо за совет!Regars

Ответы [ 6 ]

12 голосов
/ 15 февраля 2011

в файле Application.ini

someservice.apikey  = 12345678
someservice.passkey = 87654321

в начальной загрузке

public function _initSomeservice()
{
    $someservice = $this->getOption('someservice');
    Zend_Registry::set('someservice', $someservice);
}

вытащить из реестра

$config = Zend_Registry::get('someservice');
6 голосов
/ 15 февраля 2011

Лучшим решением для меня было создать переменную в файле index.php.Я добавил: определено ('VARIABLE_NAME') ||define ('VARIABLE_NAME', 'Something here');

И теперь я могу получить к нему доступ из любого места; D Большое спасибо!

5 голосов
/ 17 октября 2011

Я бы не использовал ни Zend_Registry, ни константы по двум причинам

  1. В реестре вы никогда не знаете, что случилось с переменными.Каждая часть приложения может изменить их, и вы не будете замечены.Я вижу реестр фактически как anit-pattern.
  2. Константы загрязняют ваше приложение без необходимости.Что если вы используете для каждой конфигурации некоторую константу?Вам нужно сохранить дополнительный документ со всеми определенными константами, поддерживать его ужасно.

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

someservice.apikey  = 12345678
someservice.passkey = 87654321

Начальная загрузка задается в качестве параметра в frontController.Если у вас есть контроллер действий, это упрощает процесс:

$serviceOptions = $this->getInvokeArg('bootstrap')->getOption('someservice');

Если у вас есть экземпляр службы в вашем контроллере, теперь вы можете передавать их через конструктор и / или установщик.

Если вы хотите получить параметры не внутри вашего контроллера, а где-то еще, вы можете использовать шаблон синглтона, который реализует frontController.Таким образом, в любом месте (конечно, только во время диспетчеризации, а не во время самой начальной загрузки) вы можете сделать это:

$frontController = Zend_Controller_Front::getInstance();
$serviceOptions  = $frontController->getParam('bootstrap')
                                   ->getOption('someservice');

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

1 голос
/ 14 февраля 2011

Вы можете указать значение в application.ini и в Bootsrap.php, чтобы прочитать его и сохранить в Zend_Registry. Вы также можете использовать метод определения PHP для создания констант (если вы можете использовать константу).

0 голосов
/ 27 июня 2013

У меня есть ряд констант со следующим соглашением об именах в application.ini:

system.image_path  = "/assets/images"
system.custom_path = "/assets/custom"
system.cdn_URL     = "http://cdnurl.com"  

И я просто ссылаюсь на них в своем коде, как если бы они были константами PHP:

SYSTEM_IMAGE_PATH
SYSTEM_CUSTOM_PATH
SYSTEM_CDN_URL
0 голосов
/ 07 января 2012

Я только что добавил определение ('VARIABLE_NAME', 'Что-то здесь'); для начальной загрузки. Мгновенные глобальные константы.

Эти константы были помещены в защищенную функцию _intiFuncName внутри класса расширения начальной загрузки

...