Introduction
Config
aide à manipuler votre configuration qu'elle soie stockée
dans des fichiers XML, des tableaux PHP
ou tout autre genre de source de données.
Il comporte les fonctionalités suivantes :
Analyser les différents formats de configuration.
Manipuler les sections, directives, commentaires, blancs de la
manière que vous voulez.
Réécrire de nouveau les données dans votre format
préféré.
L'objet de Config agit en tant que conteneur
pour d'autres objets de Config_Container.
Il ne fait pas beaucoup mais rend la tenue des opérations de E/S
plus faciles.
Il contient l'objet racine de Config_Container
qui contient alternativement un objet enfant de
Config_Container.
Les objets Config_Container stockent
des références à leur parent
et ont un tableau d'enfants.
Cette structure permet alors d'accéder à différent les
conteneurs et leur contenu.
Un objet de Config_Container
peut être de différents types :
Section: une section contient
d'autres objets Config_Container.
Directive: une directive ne contient aucun autre objet
mais a un contenu et un nom.
Voyez-les comme des paires de clef-valeur.
Commentaire: comme les directives,
les commentaires ont un contenu
mais elles n'ont pas de nom.
Elles sont rendues d'une manière spéciale selon le
type de configuration que vous choisissez.
Blanc: elles n'ont ni contenu ni nom mais sont utilisées pour
indiquer les interlignes si votre _renderer_ les emploie.
En utilisant le paquet Config,
la majeure partie du travail est effectuée avec les objets
Config_Container .
Exemple 31-1.
Un exemple qui créera un nouveau
Config_Container
// initialise un objet Config_Container
require_once('Config.php');
$conf =& new Config_Container('section', 'conf');
$conf_DB =& $conf->createSection('DB');
$conf_DB->createDirective('type', 'mysql');
$conf_DB->createDirective('host', 'localhost');
$conf_DB->createDirective('user', 'root');
$conf_DB->createDirective('pass', 'root');
// set this container as our root container child in Config
$config = new Config();
$config->setRoot($conf);
// Ecrit le conteneur dans un tableau php
$config->writeConfig('/tmp/config_test.php', 'phparray',
array('name' => 'test');
// affiche à l'écran le contenu de notre section conf
echo $conf->toString('phparray', array('name' => 'test')); |
|
L'exemple ci-dessus illustre comment Config
et le Config_Container peuvent agir l'un sur l'autre.
Il y a d'autres manières.
Vous pourriez avoir par exemple d'abord créer l'objet config
et ensuite utiliser
$config->getRoot()
pour ajouter des sections et des directives à l'objet
référence retourné.
Exemple 31-2. Lire une configuration dans un fichier XML require_once 'Config.php';
$conf = new Config;
$root =& $conf->parseConfig('config.xml', 'XML');
if (PEAR::isError($root)) {
die('Erreur à la tentative de lecture de la configuration: '
. $root->getMessage());
}
$settings = $racine->toArray();
printf('Paramètres utilisateur: <a href="%s">%s %s</a>',
$settings['root']['conf']['www'],
$settings['root']['conf']['prenom'],
$settings['root']['conf']['nom']
); |
Dans cet exemple le fichier XML config.xml
ressemble à ceci:
<?xml version="1.0" encoding="UTF-8"?>
<conf>
<prenom>John</prenom>
<nom>Doe</nom>
<www>http://example.com/</www>
</conf> |
|
Pour plus d'informations,
vous pouvez lire la
doc de l'API,
les exemples et
les tests du package,
et un bon
tutorial
sur DevShed.