• Ce blog — désormais archivé — est en lecture seule.

La gestion d’une configuration en PHP5 avec wConfig et XML dans wMVC

Ce qui suit est déprécié depuis janvier 2010.
Merci de votre compréhension.

 

Dans wMVC, les fichiers de configuration sont en XML. Ce format est bien géré par PHP grâce à l’objet SimpleXML. J’ai donc réalisé une petite classe qui permet de gérer une configuration complète sans trop d’effort.

Voici la classe wConfig, rien de bien compliqué :

<?php

class wConfig
{
  private $XMLConfig;
  private static $instance;

  private function __construct()
  {
    $xml = file_get_contents('applications' . __DIR_SEPARATOR__ . wContext::getInstance()->getAppName() . __DIR_SEPARATOR__ . 'configuration' . __DIR_SEPARATOR__ . 'configuration.xml');

    $this->XMLConfig = new SimpleXMLElement($xml);
  }

  public static function getInstance()
  {
    if(is_null(self::$instance))
    {
      self::$instance = new self();
    }
    return self::$instance;
  }

  public function getValueOf($var)
  {
    $xml = $this->XMLConfig;
    $arr = split('/', $var);

    foreach($arr as $a)
    {
      if(!isset($xml->$a))
      {
        if(__DEBUG__)
          $GLOBALS['logger']->info('[wConfig] No config found for ' . $var);

        return null;
      }

      $xml = $xml->$a;
    }

    $res = $xml;

    if(__DEBUG__)
      $GLOBALS['logger']->info($res, '[wConfig] Looking for config ' . $var);

    return $res;
  }
}

?>

Dans le constructeur, on récupère le XML du fichier selon l’application courante (voir Presentation d’une classe Context dans un MVC PHP5 : wContext dans wMVC pour le contexte) :

$xml = file_get_contents('applications' . __DIR_SEPARATOR__ . wContext::getInstance()->getAppName() . __DIR_SEPARATOR__ . 'configuration' . __DIR_SEPARATOR__ . 'configuration.xml');

Eexemple d’un fichier de configuration :

< ?xml version="1.0" encoding="utf-8"?>
<configuration>
  <site_params>
    <lang>en</lang>
    <nom>William DURAND - Web developer</nom>
    <stylesheets>fixeIE.css,style.css</stylesheets>
    <javascripts></javascripts>
  </site_params>
  ...
</configuration>

Pour accéder au nom du site il suffit d’appeler la méthode getValueOf() et de lui passer l’élément de configuration : site_params/nom.

public function getValueOf($var)
{
  $xml = $this->XMLConfig;
  $arr = split('/', $var);

  foreach($arr as $a)
  {
    if(!isset($xml->$a))
    {
      if(__DEBUG__)
        $GLOBALS['logger']->info('[wConfig] No config found for ' . $var);

      return null;
    }

    $xml = $xml->$a;
  }

  $res = $xml;

  if(__DEBUG__)
    $GLOBALS['logger']->info($res, '[wConfig] Looking for config ' . $var);

  return $res;
}

Cette méthode parcourt le fichier XML et renvoi la valeur que l’on souhaite s’il la trouve. Nous avons un objet de configuration accessible partout. C’est très simple et très pratique.

  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Twitter
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • MySpace
  • Netvibes
  • PDF
  • Ping.fm
  • RSS
  • Technorati
  • viadeo FR
  • Wikio
  • Yahoo! Buzz

Related Posts

Cet article a été publié dans Ancien blog avec les mots-clefs : , , , , , . Bookmarker le permalien. Les commentaires et les trackbacks sont fermés.