Php 从application.ini读取值

Php 从application.ini读取值,php,zend-framework,Php,Zend Framework,我有一个在application.ini中定义的值 conditions.time= 50 如何以zend方式在zend操作中读取它?PHP有一个函数 您可能可以使用getenv('conditions.time') 您可以使用 应用程序的Bootstrap.php可以使用$this->getOptions()访问Application.ini,您可以在注册表中存储所需的值,如下所示: public function _initConditions() { $config =

我有一个在application.ini中定义的值

conditions.time= 50

如何以zend方式在zend操作中读取它?

PHP有一个函数

您可能可以使用
getenv('conditions.time')

您可以使用


应用程序的
Bootstrap.php
可以使用
$this->getOptions()
访问
Application.ini
,您可以在注册表中存储所需的值,如下所示:

  public function _initConditions()
  {
    $config = $this->getOptions();

    if (isset($config['conditions']))
    {

      $registry = Zend_Registry::getInstance();

      $registry->conditions = $config['conditions'];

    }
  }

然后,您可以使用注册表访问您的条件,方式与您在此处设置条件的方式大致相同。

这里有一个操作帮助程序:

class My_Controller_Action_Helper_Config
    extends Zend_Controller_Action_Helper_Abstract
{
    /**
     * @return array
     */
    public function direct()
    {
        $bootstrap = $this->getActionController()->getInvokeArg('bootstrap');
        $ns = strtolower(trim($bootstrap->getAppNamespace(), '_'));
        return $bootstrap->getOption($ns);
    }
}
您必须将应用程序命名空间作为前缀:

; application.ini
My.conditions.time= 50
您可以在如下控制器中使用它:

$config = $this->_helper->config();
$this->view->time = $config['conditions']['time'];

以下是我的方法,您可以在应用程序中的任何位置使用:

class My_Controller_Action_Helper_Options extends Zend_Controller_Action_Helper_Abstract
{
    /**
     * Options separator delimiterm e.g.
     * option.subkey or
     * option/subkey
     */
    const DELIMITER = '.';

    /**
     * Retrieve application options from bootstrap
     * 
     * @return array
     */
    public function getOptions()
    {
        $front = $this->getFrontController();
        $bootstrap = $front->getParam('bootstrap');
        if (null === $bootstrap) {
            throw new Exception('Unable to find bootstrap');
        }

        return $bootstrap->getOptions();
    }

    /**
     * Get array key if exists, otherwise returns null
     * 
     * @param array $values
     * @param string $key
     * @return mixed 
     */
    private static function _getValue($values, $key) 
    {   
        if (is_array($values) && isset($values[$key])) {

            return $values[$key];  
        } 

        return null;
    }

    /**
     * Get application option form bootstrap
     * 
     * @example
     * $options = Zend_Controller_Action_HelperBroker::getStaticHelper('options')
     * ->get('conditions.time', 'defaultvalue');
     * 
     * @param   string $section
     * @param   mixed $default
     * @return  Zend_Config
     */
    public function get($section = null, $default = null)
    {
        $value = $this->getOptions();

        if (null !== $section && is_string($section)) {
            if (false === strpos($section, self::DELIMITER)) {
                $value = $this->_getValue($value, $section);
            } else {
                $sections = explode(self::DELIMITER, $section);        
                foreach ($sections as $section) {
                    $value = $this->_getValue($value, $section);
                    if (null === $value) {

                        break;
                    }
                }
            }

        }

        if (null === $value) {

            return $default;
        }

        return $value;
    }

    /**
     * @param   string $section
     * @param   mixed $default
     * @return  Zend_Config
     */
    public function direct($section = null, $default = null)
    {
        return $this->get($section, $default);
    }
}

这会导致至少读取配置文件两次=不推荐。这些值已经在内存中(在前端控制器的引导参数中),因此您应该从那里检索它们。这是一个很好的帮助程序,只是它不能作为静态的。如果可用,您应该从前端控制器获取引导。接下来需要检查的是,配置数组键是否存在。在注册表中存储而不是直接从引导读取有什么意义?因为无论何时需要该值,引导都可能随时可用,也可能在需要时不可用?并非所有需要配置的代码都在控制器中定义。。。
class My_Controller_Action_Helper_Options extends Zend_Controller_Action_Helper_Abstract
{
    /**
     * Options separator delimiterm e.g.
     * option.subkey or
     * option/subkey
     */
    const DELIMITER = '.';

    /**
     * Retrieve application options from bootstrap
     * 
     * @return array
     */
    public function getOptions()
    {
        $front = $this->getFrontController();
        $bootstrap = $front->getParam('bootstrap');
        if (null === $bootstrap) {
            throw new Exception('Unable to find bootstrap');
        }

        return $bootstrap->getOptions();
    }

    /**
     * Get array key if exists, otherwise returns null
     * 
     * @param array $values
     * @param string $key
     * @return mixed 
     */
    private static function _getValue($values, $key) 
    {   
        if (is_array($values) && isset($values[$key])) {

            return $values[$key];  
        } 

        return null;
    }

    /**
     * Get application option form bootstrap
     * 
     * @example
     * $options = Zend_Controller_Action_HelperBroker::getStaticHelper('options')
     * ->get('conditions.time', 'defaultvalue');
     * 
     * @param   string $section
     * @param   mixed $default
     * @return  Zend_Config
     */
    public function get($section = null, $default = null)
    {
        $value = $this->getOptions();

        if (null !== $section && is_string($section)) {
            if (false === strpos($section, self::DELIMITER)) {
                $value = $this->_getValue($value, $section);
            } else {
                $sections = explode(self::DELIMITER, $section);        
                foreach ($sections as $section) {
                    $value = $this->_getValue($value, $section);
                    if (null === $value) {

                        break;
                    }
                }
            }

        }

        if (null === $value) {

            return $default;
        }

        return $value;
    }

    /**
     * @param   string $section
     * @param   mixed $default
     * @return  Zend_Config
     */
    public function direct($section = null, $default = null)
    {
        return $this->get($section, $default);
    }
}