Zend, Global variable in Application.ini?

后端 未结 6 1253
失恋的感觉
失恋的感觉 2021-02-04 14:24

I have a question as I need to have a global static variable and I have question is any possibility to add it to the application.ini file, how to do it?

Or I have to:

6条回答
  •  [愿得一人]
    2021-02-04 15:09

    I wouldn't use the Zend_Registry nor constants, for two reasons

    1. In the registry you are never sure what happened with the variables. Every part of the application can change them and you wouldn't be noticed. I see the registry actually as an anit-pattern.
    2. Constants are polluting your application unnecessarily. What if you use for every configuration some constant? You have to keep an additional document with all the constants defined, it's horrible to maintain.

    What the best option is, is to directly get the config object from the bootstrap. In next examples, I assume you have this in your application.ini:

    someservice.apikey  = 12345678
    someservice.passkey = 87654321
    

    The bootstrap is set as a parameter in the frontController. If you have an action controller, this makes it as simple as this:

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

    If you have a service instantiated in your controller, you now can pass them on through the constructor and/or setter.

    If you want to get the options not within your controller, but somewhere else, you can use the singleton pattern the frontController implements. So at any place (of course only during dispatching, not during the bootstrap itself) you're able to do this:

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

    With above method you're safe you have always the right configuration option and not some possibly mutated one.

提交回复
热议问题