Introduction

Introduction – Ce que Config peut faire

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 .

Un exemple qui créera un nouveau Config_Container

<?php
// 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é.

Lire une configuration dans un fichier XML

<?php
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="/manuel-pear/%s" data-lbox="1" title="Manuel Pear - %s %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.

LoadingChargement en cours