Chapter 3. Zend_Config

Table of Contents

3.1. Introduction
3.2. Zend_Config_Array
3.2.1. Introduction
3.3. Zend_Config_Ini
3.3.1. Introduction
3.4. Zend_Config_Xml
3.4.1. Introduction

3.1. Introduction

Zend_Config is designed to simplify the use of configuration data for web applications. It provides a property-based interface for reading configuration data from a variety of media supporting hierarchical data storage. Currently Zend_Config provides helper classes for configuration data stored in text files via Zend_Config_Array, Zend_Config_Ini, and Zend_Config_Xml.

Zend_Config supports a single inheritance model that enables configuration data to be inherited from one section of configuration data into another. Though Zend_Config supports inheritance trees of arbitrary height, a configuration data section may only inherit from one parent section.

Internally Zend_Config implements the Countable and Iterator interfaces in order to facilitate easy access to configuration data. The data are made accessible to Zend_Config through an associative array, which may be multidimensional. A helper class such as Zend_Config_Ini typically provides this array to Zend_Config, but the interface does not require using this convention.

[Note] Note
Though Zend_Config allows in-memory modification of loaded configuration data, it is not designed to facilitate saving configuration data to specific storage media. Tools for creating and modifying configuration data for specific storage media are currently outside of the Zend Framework scope. Third-party open source solutions are often available for the purpose of creating and modifying configuration data for various storage media.

Example 3.1. Loading Configuration Data from an INI File

In this example configuration data for a production environment are loaded from an INI file using Zend_Config_Ini:

<?php
require_once 'Zend/Config.php';
require_once 'Zend/Config/Ini.php';
$config = new Zend_Config(Zend_Config_Ini::load('/path/to/config.ini', 'production'));
?>       

Now the configuration data are available from the $config object's properties. Suppose the configuration data include database connection parameters and that the data are stored in the INI file as:

[production]
database.type     = pdo_mysql
database.host     = db.example.com
database.username = dbuser
database.password = secret
database.name     = dbname
            

The application might create a connection to the database with:

<?php
$myApplicationObject->databaseConnect($config->database->type,
                                      $config->database->host,
                                      $config->database->username,
                                      $config->database->password,
                                      $config->database->name);
?>       

As shown above, the configuration data are accessed with the object property syntax.

We can also extend Zend_Config easily for various purposes. Here an extending class introduces a public dump() method for quickly printing loaded configuration data:

<?php
class MyConfig extends Zend_Config
{
    protected $_indent;

    public function dump()
    {
        $this->_indent = 0;
        echo "<pre>\n";
        $this->_dumpRecursor($this);
        echo "</pre>";
    }

    protected function _dumpRecursor($config)
    {
        foreach ($config as $key => $value) {
            echo str_repeat("    ", $this->_indent) . "$key =>";
            if ($value instanceof Zend_Config) {
                echo "\n";
                $this->_indent++;
                $this->_dumpRecursor($value);
                $this->_indent--;
            } else {
                echo " $value\n";
            }
        }
    }
}

$config = new MyConfig(Zend_Config_Ini::load('/path/to/config.ini', 'production'));

$config->dump();
?>   

For the configuration data in the example above, this would print:

<pre>
database =>
    type => pdo_mysql
    host => db.example.com
    username => dbuser
    password => secret
    name => dbname
</pre>